IT story/Git

L03 Git 실습

jason719 2016. 10. 21. 23:58

2016.10.13(THU)


L03 Git 실습


  1. 프로젝트 생성

    1. 터미널 or cmd 창을 연다.

    2. mkdir -/MyProject //MyProject라는 폴더 생성

      1. 터미널을 열면 최초 경로가 user 폴더에 로그인 된 유저의 경로가 된다.

      2. 명령어가 익숙하지 않다면 탐색기(finder)로 경로를 찾아가 폴더를 생성하면 된다.

    3. echo “Hello Git”>test.txt

      1. 테스트할 프로젝트 생성 test.txt를 생성

      2. 명령어가 익숙하지 않다면 탐색기(finder)로 경로를 찾아가 파일을 생성


  1. git 로컬 저장소(Git Local repository)를 만들고 프로젝트 등록하기

    1. git init

      1. git으로 관리하고 싶은 프로젝트가 있는 폴더로 이동 후 git init 명령을 하면 로컬 저장소가 만들어 진다.

      2. git status

untracked file로 Working Directory(작업 폴더) 영역에 파일이 Staging

Area(index)에 추가되지 않아 아무런 작업도 할 수 없는 상태이다.

    1. git add test.txt

      1. add는 작업할 프로젝트를 추적하는 명령어

      2. git status

tracked file은 test.txt이고 추적 중인 파일이 index에서 Local Repository

(저장소)로 저장되기를 기다리고 있다. 이때 상태는 “Changes to be

committed”이다.

    1. test.txt 내용 수정

      1. 내용

<body>

<master>Hello git</master>

</body>

      1. git satus

“Changes not Staged for commit”으로 test.txt를 저장소에 등록할 수

없는 상태이다.

      1. 추적(tracked)중인 프로젝트를 수정했을 시 다시 git add로 수정한 프로젝트를 index에 올려야 저장소에 저장(commit)할 수 있다.

    1. git commit -m “master initial v0”

      1. -m은 프로젝트에 코멘트를 다는 것

      2. test.txt를 수정한 상태이기 때문에 바로 commit을 할 수 없다.

    2. git commit -a -m “master initial v0”

      1. -a는 추적(tracked) 중인 파일을 자동으로 add 한다.

      2. git status

untracked files로 추적 중인 프로젝트가 commit 되면 추적을 마치게

된다.

      1. git log

commit 상태를 확인할 수 있다. 빠져나오기 ctrl+z

    1. git branch topic

      1. topic 가지를 만든다.

    2. git checkout topic

      1. Head 포인터를 topic 가지로 옮긴다.

      2. topic 가지를 만들고 바로 HEAD를 옮기고 싶다면

        1. git checkout -b topic

    3. test.txt의 내용을 수정하고 저장

      1. 내용

<body>

<master>Hello git</master>

</body>

<footer>company info</footer>

      1. git status

Chages not staged for commit

    1. git commit -a -m “insert footer topic v0”

      1. topic 가지를 저장소에 저장


  1. merge로 가지 병합하기

    1. git checkout master

test.txt의 내용을 확인하면 자동으로 master 가지에서 마지막 commit 했던

상태로 되돌아가 있다.

    1. test.txt의 내용을 수정하고 저장

      1. 내용

<header>menu</header>

<body>

<master>Hello git</master>

</body>

    1. git commit -a -m “insert header master v1”

      1. master 가지를 로컬 저장소에 저장

    2. git checkout topic

      1. master 가지를 topic과 병합하면 병합 후 사용하지 않을 topic 가지의 head 포인터가 이동하지 않기 때문에 topic 가지를 master 가지에 병합할 예정이다.

    3. git merge master

      1. topic 가지를 master 가지와 병합 후 새로운 commit을 만든다.

      2. topic의 test.txt는 master의 test.txt와 병합된 결과이다.

      3. topic의 HEAD는 master와 같은 가지에 있고 병합된 결과로 마지막 commit을 가리킨다.

      4. master의 HEAD는 변동 사항이 없다.

    4. git checkout topic

    5. git merge topic

      1. master HEAD를 topic의 마지막 commit 위치로 이동

      2. mster와 topic은 같은 가지의 이력을 가지고 있기 때문에 이때 merge를 병합이라 부르기 부족한 부분이 있다.

      3. 이를 fast foward(빨리 감기) 병합이라 부른다.

    6. git branch -d topic

      1. topic 가지가 필요 없어졌기 때문에 삭제하였다.



  1. 병합 시 충돌 해결

    1. git merge master

    2. Auto-merging test.txt

CONFLICT (content): Merge conflict in test.txt

Automatic merge failed; fix conflicts and then commit the result.

      1. 충돌을 의미한다.

      2. 병합 시 충돌이 일어났지만 topic과 master 가지는 병합이 되었으며 새로운 commit을 만들지 않고 대기 중인 상태에 있다.(충돌이 일어난 부분을 수정하고 commit 해야 한다.)

      3. 병합 실패 시 마지막 commit 이력을 등록하지 않으면 다른 동작을 할 수 없다.

    1. git diff    

      1. 병합 시 변동 사항 or 충돌이 일어난 위치를 표시해준다.

    2. test.txt에서 충돌이 일어난 부분을 수정

      1. <<<<<  >>>>표시 안, 두 가지의 내용을 비교한 후 수정한다.

      2. <<<<<< 충돌 표시를 삭제라고 저장한다.

    3. git commit -a -m “topic merge maser”

      1. 병합이 완료 되었다.

    4. git checkout topic

    5. git merge topic

    6. git branch -d topic




'IT story > Git' 카테고리의 다른 글

L05 Git 이력 되돌리기  (0) 2016.10.22
L04 Git Remote Repository  (0) 2016.10.21
L02 Git 설치  (0) 2016.10.21
L01 Git 기본 원리  (0) 2016.10.21