Git - Detached HEAD

Jnnsu·2023년 12월 3일
1
post-thumbnail

git checkout 커맨드를 사용해서 HEAD 자체가 가리키던 것을 바꿀 수도 있다. 사실 HEAD가 아예 커밋을 직접적으로 가리키게 하는 것도 가능하다.

원래의 이 상태에서 원래의 이 상태에서 git checkout 9033를 실행하면 아래 그림처럼 바뀐다.

이제 HEAD가 master 브랜치를 가리키는 게 아니라 본인이 직접 9033.. 커밋을 가리키고 있다.
이렇게 브랜치를 통해서 커밋을 가리키는 게 아니라 본인이 직접 커밋을 가리키고 있는 상태를 Detached HEAD라고 한다.

그럼 Detached HEAD는 언제 사용할까?

과거의 특정 커밋에서 새로운 브랜치를 만들고 싶을 때이다.

지금 위의 그림과 같이 Detached HEAD인 상태에서 git branch premium으로 premium 브랜치를 새로 만들면 아래 그림과 같은 결과가 된다.

1. 지금 premium이라는 브랜치가 새로 생성되었고
2. premium 브랜치는 HEAD가 가리키던 커밋을 똑같이 가리킨다.

이제 HEAD가 브랜치를 가리키도록 git checkout premium을 해주면 HEAD가 Detached HEAD 상태에서 벗어나 premium 브랜치를 가리키게 된다.

그리고 이 상태에서 새 커밋을 하면

이제 premium 브랜치로 master 브랜치와 다른 새로운 코드 관리 흐름을 가져갈 수 있게 된다.


방금 한 것처럼 특정 커밋을 시작점으로 하는 새로운 브랜치를 만들고 싶을 때 HEAD를 잠시 Detached HEAD 상태로 두는 경우가 많다.

이 내용을 정리하면

git checkout 뒤에는 커밋 아이디 또는 브랜치의 이름을 줘서 HEAD가 직접 커밋을 가리키거나, 브랜치를 가리키도록 할 수 있다.

HEAD가 직접 커밋을 가리키는 상태를 Detached HEAD 라고 하고, 주로 특정 커밋을 시작점으로 새로운 브랜치를 생성할 때 사용한다.

git checkout master

이 커맨드의 뜻은 다음과 같이 해석된다.

= master 브랜치로 이동하라

= HEAD가 master 브랜치를 가리키도록 하라

= HEAD가 master 브랜치가 가리키던 커밋을 간접적으로 가리키게 됨으로써

= working directory의 내부도 그 커밋에 맞게 변함으로써

= master 브랜치로 이동한 것을 사용자는 실감하게 됨

0개의 댓글