더북(TheBook)

깃 가지치기

깃 프로젝트에서 특정 목적으로 별도의 작업을 처리하는 과정은 기존 작업 내용의 사본을 만들어 개발용으로 사용하고 작업이 끝나면 다시 원본에 합치는 흐름으로 이루어집니다. 이처럼 깃은 목적에 따라 버전 정보를 나뭇가지처럼 나누어 관리하는데 버전 정보의 갈래를 가지(branch)라고 합니다.

git init 명령으로 저장소를 생성하면 기본적으로 master 가지(master branch)가 만들어지고 커밋을 할 때마다 가지가 자랍니다. 각 커밋은 ID로 구분합니다. 앞 예제에서 ‘content01.txt’ 파일을 생성한 최초 커밋은 7d866c7, ‘content01.txt’ 파일의 내용을 수정한 커밋은 963be7b이며 현재 master 가지는 963be7b 커밋을 가리키는 상태입니다(그림 11-3).

그림 11-3 master가 963be7b 커밋을 가리키는 상태

관리 중인 작업과 별도로 어떤 일을 처리하기 위해 git branch 명령으로 다른 가지를 생성합니다. 새로 생성한 가지는 전체 작업 내용(master)에 영향을 미치지 않고 독립적으로 수행됩니다. 예를 들어 ‘content01.txt’ 파일의 수정 작업을 iss01이라는 이름을 붙여 master가지에서 분리해서 처리할 수 있습니다.

shinjaehun@losttemple:~/gittest$ git branch iss01
Tip

분리된 작업이 끝나면 다시 master에 병합해서 변경 내용을 반영합니다.

git checkout 명령은 가지 사이를 이동하기 위한 명령입니다. 새로 생성한 iss01 가지로 이동하려면 다음과 같이 명령합니다.

shinjaehun@losttemple:~/gittest$ git checkout iss01
Switched to branch 'iss01’

iss01 가지에서 content01 내용을 수정합니다. echo 명령으로 문자열을 추가했고 변경 내용을 저장하기 위해 파일을 준비 영역에 추가( git add)한 후 커밋( git commit)했습니다.

shinjaehun@losttemple:~/gittest$ echo 'Why do I have to do this?' >> content01.txt
shinjaehun@losttemple:~/gittest$ git add content01.txt
shinjaehun@losttemple:~/gittest$ git commit -m 'Added issue01'
[iss01 d0c5408] Added issue01
1 file changed, 1 insertion(+)
Tip

커밋 결과를 잘 관찰해보면 iss01 가지에 커밋 ID는 d0c5408로 작업이 저장된 것을 확인할 수 있습니다.

git branch -v 명령으로 가지치기 상태를 확인할 수 있습니다. *이 붙은 가지가 현재 작업 중인 가지이며 가지마다 커밋 정보가 표시됩니다. master에서 분리된 iss01 가지가 보입니다.

shinjaehun@losttemple:~/gittest$ git branch -v
* iss01 d0c5408 Added issue01
  master 963be7b Edited content01.txt

지금까지 작업 결과를 그림으로 나타내면 다음과 같습니다. 추가한 iss01 가지가 새로운 커밋 d0c5408을 가리키고 있습니다. master 가지는 아직도 963be7b 커밋을 가리키고 있습니다(그림 11-4).

그림 11-4 iss01 가지 추가

‘content01.txt’ 파일을 수정하는 작업 도중 새로운 파일 ‘content02.txt’를 생성해서 작업을 진행하게 되었습니다. ‘content01.txt’ 파일 수정을 위해 추가한 iss01 가지는 그대로 두고 다시 master로 돌아와서 ‘content02.txt’ 파일을 생성해봅시다.

shinjaehun@losttemple:~/gittest$ git checkout master
Switched to branch 'master'

echo 명령으로 ‘content02.txt’를 생성하고 작업을 커밋합니다.

shinjaehun@losttemple:~/gittest$ echo 'This file is meaningless, too.' > content02.txt
shinjaehun@losttemple:~/gittest$ git add content02.txt
shinjaehun@losttemple:~/gittest$ git commit -m 'Added content02.txt'
[master 7fa9dcc] Added content02.txt
1 file changed, 1 insertion(+)
create mode 100644 content02.txt
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.