git branch

Tool/Git 2013. 3. 23. 00:30

master branch 에서 HEAD 상태에 놓은 작업물들을 원격 저장소에 적용하기 전에,
branch 란 것에 대해서 조금 더 알아보겠습니다.

 

지금까지는 첫번째 commit 후에 master branch가 생성되었고, 현재도 master에서 작업 중입니다.
이 쯤에서 기존의 파일을 디버깅한다던지, 기능을 추가한다던지 하는 이슈가 생겼을 때,
현재 작업해 놓은 master 에서 가지(branch)를 쳐서 새로운 branch를 생성하여,
기존 master는 보존하고, 새로운 branch에서 이슈를 해결할 수 있습니다.
이렇게 한 개 이상의 branch가 생성되었을 때 각각의 branch에서 독립적으로 작업을 진행할 수 있으며,
작업을 완료하고 나서는 새로 생성한 branch와 master를 병합(merge)할 수 있습니다.

 

 

 

git branch 명령은 현재 보유중인 branch 들을 모두 출력하며,
현재 작업 중인 branch를 (*) 마크로 표시합니다.
새로운 branch를 생성하려면 git branch <new branch> 라고 명령합니다.

 

지금까지 작업한 master에서 commit 로그를 살펴보겠습니다.

 

$ git branch
* master
$ git log
commit 3e9f5ffc4fea440b2f23830e395797a5c571a99b
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 11:15:12 2013 +0900

 

    modify file1 2nd

 

commit 449512a3e4e10093e0631af0733b493147c3eee2
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 11:09:09 2013 +0900

 

    modify file1

 

commit 28713cea1fe5722c24caaa605e6810caf094d955
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 10:35:55 2013 +0900

 

    first file added

 

 

이번에는 testing 이란 새로운 branch를 만들고,
포인트 개념의 HEAD가 testing 을 가리키도록 checkout 명령을 사용합니다.

git branch B, git checkout B 의 명령을 -b(branch) 옵션을 사용하여 git checkout -b B 라고 한번에 명령할 수 있습니다.
병합 후 필요없는 branch는 -d(delete) 옵션으로 삭제합니다. git branch -d B

 

$ git branch testing
$ git branch
* master
  testing

$ git checkout testing
Switched to branch 'testing'
$ git branch
  master
* testing

$ git log
commit 3e9f5ffc4fea440b2f23830e395797a5c571a99b
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 11:15:12 2013 +0900

 

    modify file1 2nd

 

commit 449512a3e4e10093e0631af0733b493147c3eee2
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 11:09:09 2013 +0900

 

    modify file1

 

commit 28713cea1fe5722c24caaa605e6810caf094d955
Author: ggamzzak <ggamzzak@test.com>
Date:   Tue Mar 19 10:35:55 2013 +0900

 

    first file added

 

(*)은 현재 작업 중인 branch라고 했습니다.
checkout 명령으로 작업 중인 branch를 변경할 수 있었습니다.
새로 생성된 testing의 log를 보면 master의 commit 히스토리가 그대로 복제되었습니다.
이제 이 두 branch는 독립적으로 작업할 수 있습니다.
master에서 commit을 해도 testing에 적용되지 않으며,
testing에서 commit을 해도 master에는 적용되지 않습니다.

 

이렇게 testing 에서 이슈를 완료하면 merge 명령을 사용하여 master와 병합하고,
필요에 따라 testing 을 삭제하면 됩니다.

 

 

 

위의 예와 비슷한 그림입니다.
master 브런치에서 세번의 commit을 실행했고,
testing 브런치를 생성한 뒤에 testing 브런치에서 한번의 commit 을 실행한 것을 나타낸 그림입니다.

 

checkout 명령을 사용해서 branch 간 이동할 때 유의할 점은, 커밋 직전(Staged)의 파일이 이동할 branch 파일과 충돌한다면 branch를 변경할 수 없습니다. 브랜치를 변경할 때에는 status로 확인하여 Working Directory를 정리하는 것이 좋습니다.

 

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        file1.txt
Please, commit your changes or stash them before you can switch branches.
Aborting


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,