.git 내부에서 HEAD를 인식하는 방법
.git 내부에는 HEAD파일이 있다. 이 파일은 HEAD를 인식하기 위한 메타 데이터를 저장하는 파일이다.
작업 중인 브랜치에 따라 변하는 HEAD파일
HEAD 파일은 현재 HEAD가 가리키는 해시 값을 저장하는 파일을 가리키는 reference 값을 저장한다. 따라서 HEAD 파일은 현재 작업중인 브랜치에 따라 값이 바뀌게 된다.
예를 들어 main 브랜치에서 .git/HEAD를 확인할 때는 이 값은 "ref: refs/heads/main" 이 된다 하지만 feature-view 브랜치에서 .git/HEAD를 확인하면 이 값은 "ref: refs/heads/feature-view" 가 된다.
이 텍스트 값은 바로 현재 브랜치의 HEAD의 해시 값을 저장하는 공간으로 해당 값을 cat 해보면 해시 값이 나온다.
예를 들어 feature-view의 head hash값을 저장하는 ".git/refs/heads/feature-view" 를 cat 하면 해시 값이 "
4c7e3dd57379485fa99e7bc248077da76550bf68"로 나오며 git log를 이용해 해당 브랜치의 HEAD를 확인해보면 해시 값이 "
4c7e3dd57379485fa99e7bc248077da76550bf68"로 일치하는 것을 확인할 수 있다.
정리
.git 폴더 내부에 있는 HEAD 파일은 HEAD가 가리키는 해시 값을 저장하는 파일을 가리키는 reference 값을 저장하는 파일이며, 이는 .git 폴더의 refs/heads/ 디렉터리에 있는 브랜치명으로 생성된 파일이다. .git/refs/heads 폴더의 브랜치 파일은 내부에 해시값을 가지는데 이 해시값은 HEAD를 위한 커밋 해시값이다.