3회차: 25/01/07 19:00 ~ 22:00
장소: ZOOM
계획: 24년 동계 모각코
스터디 주제 : branch(브랜치)
스터디 목표 : branch(브랜치) 학습하기
브랜치는 Git에서 특정 커밋을 가리키는 포인터임. 새로운 커밋을 할 때마다 브랜치는 자동으로 최신 커밋을 가리키게 됨. 브랜치가 '가리킨다'라는 표현을 사용하는 이유는 브랜치가 단순히 "포인터" 역할을 하기 때문임.
HEAD란?
HEAD는 현재 작업 중인 브랜치 또는 커밋을 가리키는 특수한 포인터임. HEAD를 통해 현재 어떤 브랜치에서 작업 중인지 확인할 수 있음.
예를 들어, HEAD가 현재 master 브랜치를 가리키고 있다면, 다른 브랜치(예: testing)로도 이동 가능함. 또한, 브랜치의 최신 커밋이 아닌 과거 커밋(예: 98ca9나 34ac2)으로 HEAD를 이동시키는 것도 가능함.
하지만 과거 커밋으로 HEAD를 이동하면 master 브랜치의 포인터와 HEAD가 떨어지게 되어 "Detached HEAD"(분리된 HEAD) 상태가 됨. 이 상태는 특정 커밋에서 작업하고자 할 때 발생함.
원격저장소는 여러 사람이 함께 작업하기 때문에 브랜치 규칙을 정하는 것이 일반적입니다. 간단한 규칙 예시입니다.
예를 들어, feature/detail-page 브랜치에서 작업한 후 commit/push하면, 원격 저장소에 origin/feature/detail-page 브랜치가 생성됨. 여기서 origin/은 원격 저장소에 올라갔다는 것을 의미함.
| 명령어 | 설명 |
|---|---|
git branch | 로컬 저장소의 브랜치 목록을 조회함. 표시된 브랜치 중 *가 붙어 있으면 HEAD가 해당 브랜치를 가리키고 있다는 뜻임. |
git branch [-f] <브랜치명> [커밋체크섬] | 새로운 브랜치를 생성함. 커밋 체크섬을 제공하지 않으면 HEAD로부터 브랜치를 생성함. -f 옵션을 사용하면 기존 브랜치를 다른 커밋으로 강제 이동시킬 수 있음. |
git branch -r | 원격 저장소의 브랜치 목록을 조회함. |
git checkout <브랜치명> | 특정 브랜치로 이동(체크아웃). |
git checkout -b <브랜치명> <커밋체크섬> | 특정 커밋에서 브랜치를 새로 생성하고, 그 브랜치로 체크아웃 진행. 예: git checkout -b hotfix master (master로부터 hotfix 브랜치 생성 후 체크아웃). |
git merge <대상 브랜치> | 현재 브랜치와 대상 브랜치를 병합함. 병합 커밋이 새로 생기는 경우가 많음. |
git rebase <대상 브랜치> | 현재 브랜치의 커밋들을 대상 브랜치 위로 재배치함. |
git branch -d <브랜치명> | 특정 브랜치를 삭제함. 단, HEAD가 가리키고 있는 브랜치나 병합되지 않은 브랜치는 삭제 불가. |
HEAD
$ git log --oneline --graph --decorate
* 3d94a73 (HEAD -> main, origin/master, origin/main, master) add asynciotest
위 예제에서는 HEAD가 main 브랜치를 가리키고 있으며, 원격 저장소의 origin/main 브랜치도 같은 커밋을 가리키고 있음.
git checkout 명령어는 브랜치를 전환하거나 특정 커밋으로 코드를 되돌릴 때 사용됨.
브랜치 전환
새로운 브랜치는 보통 master 또는 main 브랜치에서 체크아웃한 이후 생성함. 예를 들어, master 브랜치를 기준으로 feature 브랜치를 생성하고, 해당 브랜치에서 작업한 수정 사항을 다시 master로 병합함.
$ git branch
* main
master
$ git checkout master
Switched to branch 'master'
특정 커밋으로 되돌리기
git checkout 명령어를 사용해 특정 커밋으로 워킹 트리를 되돌릴 수 있음. 커밋 ID의 앞 7자리를 사용해서 이동하면 됨.
$ git checkout 8aa7e99
Note: switching to '8aa7e99'.
HEAD is now at 8aa7e99 init
이전 커밋으로 돌아가기
이전 커밋으로 돌아가려면 git checkout - 명령어를 사용하면 됨.
$ git checkout -
Previous HEAD position was 8aa7e99 init
Switched to branch 'master'
병합 종류
PR은 브랜치를 병합하기 전 검토를 거치는 과정임. 예를 들어, master 브랜치에 코드를 병합하기 전에 동료가 내 코드를 검토할 수 있음. 협업 과정에서 자주 사용되며, 병합하기 전에 코드 품질을 유지하도록 돕는 역할을 함.
