본문 바로가기
개발툴/깃git

Git 0-추가. branch, HEAD & detached head

by 시에라177 2022. 6. 25.

# 0 브랜치(branch)의 정체

- 처음에 브랜치는 분기의 모든 커밋을 가리키는 단순한 용어인 줄 알았다. 그러나 HEAD와 Tag같은 참조였다.

- 브랜치는 해당 분기 모든 커밋을 나타내는 것이 아닌, 해당 분기의 마지막 커밋만을 가리키는 참조(Ref, reference, 포인터. 

- 커밋을 하게되면 브랜치도 마지막 커밋을 가리키기위해 마지막 커밋으로 이동. HEAD는 브랜치를 가리킴으로 같이 이동됨.

 

# 1 HEAD

- 브랜치는 여러개일 수 있지만, git에서 HEAD는 단 하나 뿐임.

- HEAD는 브랜치를 가리키는 참조(Ref, 포인터)임. 다만 커밋의 해쉬를 통해 브랜치를 가리키지 않고 커밋을 참조할 수 있음. 이 상태를 detached head라고함.

- 즉, 정상상태라면 HEAD -> branc

h -> commit 순으로 참조되어야함. 아래 이미지가 정상상태.

 

# 2 detached head.

- HEAD가 브랜치가 아닌 커밋을 직접가리키는 상태로 아래 이미지와 같음.

- git checkout 커밋해쉬 등의 명령어를 하면 detached head가 됨.

- detached head에서 커밋을 하게 되면 브랜치 참조가 없는 커밋이 생성. 그리고 HEAD는 또 브랜치 없는 커밋을 가리키게 됨.

- 만약 이 상태에서 HEAD를 마스터 브랜치로 옮기면 Theta커밋을 가비지컬렉터에 의해 삭제. reflog로 돌아갈 수는 있음.

- Theta 커밋을 유지하려면 헤드를 옮기기 전에 참조를 만들어 두어야함. 참조는 tag든 branch든 상관없음.

*git checkout -b 새로운 브랜치

'개발툴 > 깃git' 카테고리의 다른 글

Git2- config 와 remote  (0) 2022.06.24
Git1 - fork, clone  (0) 2022.06.22
Gig0 - init, clone, add , commit. 브랜치.  (0) 2022.06.22