[Git] 브랜치에 대하여
브랜치에 대하여 알아보자
소개
팀끼리 프로젝트를 할 때 main 브랜치 하나에서 동시에 각각 진행을 하게되면 서로 충돌이 발생할 수 있다. 이를 해결하기 위해 사용하는 것이 브랜치이다. 브랜치끼리는 서로 다른 작업을 어떻게 하든 서로 영향을 주지 않는다.
브랜치로 각각의 기능을 개발하다가 적정한 시기에 병합을 하여 메인 브랜치로 작업 내역을 옮겨줄 수 있게 된다.
기본 브랜치
처음에 깃을 초기화했을 때 자동으로 기본 생성되는 브랜치가 master 브랜치이다. git 자체는 기본 브랜치가 master이지만, GitHub에서는 포용적인 언어 사용을 장려하기 위해 기본 브랜치를 main으로 변경하였다. master이든 main이든 상관없이 그냥 기본 브랜치의 이름일 뿐 특별할 것 없고, 다른 브랜치와 다를 것이 없다. 기본 브랜치의 이름은 언제든지 바꿀 수 있다.
HEAD가 뭘까
HEAD는 레포지토리에서 보고 있는 작업 영역의 위치를 가리키는 포인터이다. 더 정확히 말하면, HEAD는 브랜치 포인터에 대한 레퍼런스 포인터이고, 브랜치 포인터는 현재 브랜치의 최신 커밋 위치를 가리킨다. 각 브랜치마다 브랜치 포인터를 가진다.
예를 들어 다음과 같은 git log 출력을 보면:
b8132c0 (HEAD -> main) c commit
01c781f b commit
b9e82ae a commit
이 예시에서 HEAD는 main 브랜치를 가리키고 있고, main 브랜치는 'c commit'이라는 커밋(b8132c0)을 가리키고 있다. 즉, 현재 작업 중인 브랜치가 main이고, 가장 최근 커밋이 'c commit'이라는 의미이다.
그래프로 표현하면 다음과 같다:
A---B---C (HEAD -> main)
브랜치 보기
git branch
명령어를 실행하면 현재 레포지토리에 있는 브랜치들을 전부 볼 수 있다. 현재 체크아웃된 브랜치 앞에는 *
표시가 붙는다.
$ git branch
* main
feature
bugfix
위 예시에서는 main, feature, bugfix 세 개의 브랜치가 있으며, 현재 main 브랜치에 있음을 알 수 있다.
브랜치 생성 및 전환하기
git branch <branch-name>
을 통해 브랜치를 생성할 수 있다. 이것은 브랜치를 생성하기만 할 뿐 해당 브랜치로 이동하지는 않는다.
브랜치를 이동하기 위해서는 git switch <branch-name>
의 명령어를 통해 할 수 있다. 이는 Git 최신 버전부터 도입된 명령어이다.
git checkout <branch-name>
을 이용해서 브랜치를 이동할 수도 있다. 이는 오래된 방식이지만 여전히 많이 사용된다.
switch의 -c
옵션 혹은 checkout의 -b
옵션을 사용하면 브랜치를 생성하면서 바로 이동할 수 있다.
$ git branch feature # feature 브랜치 생성
$ git switch feature # feature 브랜치로 이동
# 또는 한 번에
$ git switch -c feature # 브랜치 생성 및 이동
브랜치를 생성하고 이동한 후의 상태를 텍스트 그래프로 표현하면 다음과 같다:
A---B---C (main)
\
D (HEAD -> feature)
위 그래프는 main 브랜치에서 feature 브랜치를 생성한 후, feature 브랜치에 D 커밋을 추가한 상태를 보여준다. HEAD는 현재 feature 브랜치를 가리키고 있다.
브랜치 삭제 및 이름 바꾸기
브랜치 삭제
git branch -d <branch-name>
을 통해 브랜치를 삭제할 수 있다.
-d
옵션은 해당 브랜치의 변경 사항이 다른 브랜치에 병합되었을 때만 삭제할 수 있다. 만약 병합되지 않은 브랜치를 강제로 삭제하고 싶다면 대문자 D를 사용하여 git branch -D <branch-name>
명령어를 사용하면 된다.
$ git branch -d bird
error: the branch 'bird' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D bird'
hint: Disable this message with "git config advice.forceDeleteBranch false"
위 메시지는 bird 브랜치가 아직 병합되지 않았기 때문에 -d
옵션으로는 삭제할 수 없다는 것을 보여준다. 이 경우 -D
옵션을 사용하여 강제로 삭제할 수 있다:
$ git branch -D bird
bird 브랜치 삭제 (과거 26ef2c7).
브랜치 이름 변경
브랜치 이름을 변경하기 위해서는 변경할 브랜치로 이동 후 git branch -m <new-branch-name>
를 입력하면 된다.
$ git switch old-branch-name
$ git branch -m new-branch-name
또는 현재 브랜치가 아닌 다른 브랜치의 이름을 변경하려면:
$ git branch -m old-branch-name new-branch-name
결론
브랜치는 Git의 가장 강력한 기능 중 하나로, 여러 개발자가 동시에 작업할 수 있게 해주고, 코드의 안정성을 유지하면서 새로운 기능을 개발할 수 있게 해준다. 브랜치를 효과적으로 활용하면 개발 과정이 더욱 체계적이고 효율적으로 진행될 수 있다.