여러 개발자가 동시에 작업하다 보면, 동일한 소스코드 위에서 기능을 추가할 때도 있고, 버그를 수정할 때도 있습니다. 따라서 동일한 소스코드를 기반으로 작업을 하더라도 다양한 버전의 코드가 만들어질 수밖에 없습니다. 이럴 때, 각자 독립적인 작업 영역 안에서 작업할 수 있도록 해주는 것이 브랜치(branch)입니다. 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있습니다. 브랜치는 분기라는 뜻이지만 동사로서 가지를 뻗다라는 뜻도 가지고 있고, 실제로 브랜치는 가지를 뻗는다는 느낌으로 생각하면 됩니다.

브랜치의 생성과 이동

Git에서는 항상 작업할 브랜치를 선택해야 합니다. 처음에는 master 브랜치가 선택되어 있습니다. 다른 브랜치로 이동하기 위해서는 checkout 명령을 사용하고, 존재하지 않는 브랜치라면 이동되지 않기 때문에 branch 명령으로 브랜치를 만들고 나서 checkout해 봅시다.

git branch [branch_name]

$ git branch feature_x

별다른 인자 없이 git branch만을 실행하면 브랜치 목록 전체를 확인할 수 있습니다. * 표시는 현재 선택된 브랜치를 뜻합니다.

$ git branch
 master
 * feature_x

브랜치를 삭제하려면 -d 옵션을 이용하면 됩니다.

$ git branch -d feature_x

git checkout [branch_name]

$ git checkout feature_x

checkout이 성공하면, 브랜치 안에 있는 마지막 커밋 내용이 작업 트리에 펼쳐집니다. 브랜치가 전환되었으므로 이 후에 실행한 커밋은 전환한 브랜치에 적용됩니다. Git의 브랜치에는 HEAD라는 특수한 포인터가 있습니다.

HEAD는 현재 작업하는 로컬 브랜치을 나타내는 이름입니다. 기본적으로는 master 브랜치의 선두 부분을 나타냅니다. HEAD를 이동하면, 사용하는 브랜치가 변경됩니다. 따라서 현재 masterfeature_x 브랜치가 존재하고, feature_x 브랜치로 이동했으므로 HEAD는 feature_x에 있습니다.

checkout에서 -b 옵션을 함께 붙여주면 브랜치 생성과 이동을 한번에 실행할 수 있습니다.

$ git checkout -b feature_y

Merge

git merge [branch_name]

다른 브랜치의 변경사항을 현재 브랜치에 병합하기 위해 사용합니다. 예를 들어, 현재 브랜치가 masterfeautre_x 브랜치의 변경사항을 병합하려면 아래의 명령을 실행합니다.

$ git merge feature_x

여기서도 conflict가 발생할 수 있으며, pull에서 conflict가 발생했던 경우와 동일하게 해결하고 add - commit - push하면 됩니다.

+ Recent posts