본문 바로가기

Git

[Git] HEAD와 branch의 관계

반응형

사실 HEAD와 branch는 포인터입니다. 포인터는 무엇을 가리키는 것을 말합니다. 이전에 HEAD를 설명할 때 HEAD는 커밋을 가리킨다고 했었죠? 하지만 엄밀하게 말하면 HEAD는 브랜치를 통해 간접적으로 커밋을 가리키고 있습니다. 항상 그런건 아니지만 대부분 그렇습니다. 예외적인 부분은 checkout과 reset의 차이를 설명드릴 때 다시 다루겠습니다. 자, 그러면 HEAD와 branch는 어떻게 구성되어 있는지 그림으로 살펴보겠습니다.

 

이게 진짜 모습입니다. 커밋을 하면 HEAD가 가리키는 브랜치가 최신 커밋으로 이동하게 됩니다. 그럼 좀 더 나아가서 highlevel 브랜치를 만들면 어떻게 될까요? highlevel 브랜치를 만들면 아래 그림처럼 HEAD가 가리키던 커밋을 highlevel 브랜치가 가리키게 됩니다.

 

 

여기서 checkout highlevel을 하면 HEAD가 highlevel을 가리킵니다.

 

 

이 상태에서 커밋을 두 번 진행하면 아래와 같은 모습이 됩니다.

 

 

git checkout master를 하면 HEAD가 다시 master를 가리키게 됩니다.

 

 

그러면 여기서 커밋을 하면 어떻게 될까요? 이제 코드의 흐름이 두 갈래로 나뉘게 됩니다. 이를 '분기한다'라고 말합니다. 이 상태에서 커밋을 두 번 진행하면 아래와 같은 모습이 됩니다.

 

 

이제 마지막으로 git merge highlevel을 하면 아래와 같은 모습이 됩니다.

 

 

즉 merge 커밋은 HEAD가 가리키던 커밋에 다른 브랜치가 가리키던 커밋을 합쳐 새로운 커밋을 만드는 작업이라고 할 수 있습니다.

 

반응형

'Git' 카테고리의 다른 글

[Git] merge 완전정복  (0) 2022.01.14
[Git] Reset vs Checkout  (1) 2022.01.14
[Git] Remote repository의 브랜치  (0) 2022.01.14
[Git] branch merge 해보기  (0) 2022.01.14
[Git] branch 소개  (0) 2022.01.14