Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

aeFactory

[Git] HEAD - 현재 브랜치의 최신 커밋 본문

Git

[Git] HEAD - 현재 브랜치의 최신 커밋

은하비 2023. 5. 15. 01:36
1. HEAD란?
2. .git/HEAD
3. 상대 참조 ^ ~

HEAD란?

Git에서 HEAD란 일반적으로 현재 활성화된 브랜치의 가장 마지막 commit을 의미합니다. 하지만 현재 특정 commit으로 checkout된 상태라면 해당 commit을 가리키게 됩니다. Git의 많은 명령어들은 HEAD에서 시작하는 경우가 많기 때문에 현재 프로젝트의 HEAD를 파악하고 있어야합니다.

 

Figure 1. main 브랜치의 최신 commit을 가리키는 HEAD

HEAD는 포인터입니다. 따라서 일반적인 상황(활성화된 브랜치의 가장 마지막 commit을 가리키고 있는 상황)에서는 branch의 이름을 가리키고 있습니다. 이 때 commit log에 (HEAD -> 브랜치 이름)으로 표시됩니다..

 

Figure 2. master 브랜치의 최신 commit을 가리킬 때

하지만 checkout을 통해 branch가 아닌 commit를 HEAD가 가리키도록 할 수 있습니다. $git checkout을 사용하면 가능한데 이 때는 (HEAD)만 표시됩니다.

Figure 3. HEAD가 특정 commit을 가리키고 있을 때

.git/HEAD

Repository(.git)폴더 안에 HEAD파일이 존재합니다. 내용을 $cat HEAD를 통해 살펴볼 수 있습니다.

Figure 3. $cat HEAD 결과

확인해보면 HEAD파일은 Branch를 가리키고 있습니다.

상대 참조 ^ ~

$git checkout을 을 사용하면 특정 commit으로 HEAD를 이동시킬 수 있습니다. 이 때 $git checkout (commit hash)를 이용하여 이동할 수도 있지만 상대 참조를 이용해 현재 HEAD에서부터 얼마나 떨어진 commit으로 checkout할지 정할 수 있습니다.

^ (caret)

^하나 당 하나씩 parent쪽으로 이동합니다. 예를 들어 $git checkout HEAD^^ 사용시 2커밋 전으로 HEAD가 이동합니다.

~ (tilde)

더 여러 커밋 전으로 거슬러 올라가야 할 때 ^를 여러 개 붙이는 방식보다 ~를 사용하면 쉽습니다. $git checkout HEAD~2명령어는 동일하게 2커밋 이동할 수 있습니다.