aeFactory
[Git] HEAD - 현재 브랜치의 최신 커밋 본문
1. HEAD란?
2. .git/HEAD
3. 상대 참조 ^ ~
HEAD란?
Git에서 HEAD란 일반적으로 현재 활성화된 브랜치의 가장 마지막 commit을 의미합니다. 하지만 현재 특정 commit으로 checkout된 상태라면 해당 commit을 가리키게 됩니다. Git의 많은 명령어들은 HEAD에서 시작하는 경우가 많기 때문에 현재 프로젝트의 HEAD를 파악하고 있어야합니다.
HEAD는 포인터입니다. 따라서 일반적인 상황(활성화된 브랜치의 가장 마지막 commit을 가리키고 있는 상황)에서는 branch의 이름을 가리키고 있습니다. 이 때 commit log에 (HEAD -> 브랜치 이름)으로 표시됩니다..
하지만 checkout을 통해 branch가 아닌 commit를 HEAD가 가리키도록 할 수 있습니다. $git checkout
을 사용하면 가능한데 이 때는 (HEAD)만 표시됩니다.
.git/HEAD
Repository(.git)폴더 안에 HEAD파일이 존재합니다. 내용을 $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커밋 이동할 수 있습니다.
'Git' 카테고리의 다른 글
[Git] commit message convention - 커밋 메시지 컨벤션 (0) | 2023.05.18 |
---|---|
[Git] git checkout switch restore - 브랜치를 옮기고 수정 사항을 복원하는 법 (0) | 2023.05.17 |
[Git] git stash - 깃 작업 내용을 임시 저장하는 법 (0) | 2023.05.16 |
[Git] 깃의 3가지 작업 영역과 파일의 상태에 관한 LifeCycle (0) | 2023.05.14 |