본문 바로가기

Git,Github

Git - Detached HEAD 당황하지 말자

본인은 이 상황에 처하자, 알집 압축본을 
Slack으로 팀원들과 공유하고 Git 사용을 포기해본 적이 있다(...)

 

뭣때문에 그런지는 모르겠는데, 아마 SourceTree 관련해서 뭐 이것저것 만져보다가

뭘 잘못 눌러서 그랬던것 같다.

(내 개인적인 생각인데, CLI로 깃을 먼저 철저하게 배워놔야 한다고 생각한다)

 

우선 HEAD 부터 알아야 하겠다.

각 브랜치에 있는 가장 최신의 커밋을 가치키는게 HEAD이다.

 

간단히 4개의 커밋이 있다고 해보자, 

본인은 Master 브랜치만 있는 상태이고, 당연히 HEAD는 master의 가장 최근 커밋인

15a200c를 가치키고 있다.

 

근데 여기서 내가 second 커밋으로 돌아가기 위해서, git checkout efe765d
커맨드를 입력했다고 보자.

보통 깃에 익숙하지 않은 사람들은
이 무시무시한 장문의 경고문을 보면 굉장히 무서워진다(...)

 

이와 더불어 코드 에디터에서도 second 커밋 이후 작업물들이 싹 사라졌기에
굉장히 당황하게 된다(내가 그랬다)

출처 :  https://www.cloudbees.com/blog/git-detached-head

 

 

이때 .git 의 HEAD 파일을 열어보면

 

원래는 refs/heads/master 이렇게 나와야 하는데

아예 특정 커밋의 해쉬가 떠버렸다. 근데 어찌보면 checkout을 했으니 당연하다.

 

해결방법은 간단하다.

switch나 checkout으로 그냥 다시 master 브랜치로 가면 끝이다. 

 

그냥 뭐랄까 과거탐험(?) 하고 온 셈 치면 될 것이다.

원래의 커밋과 브랜치에는 아무 영향이 없다.

 

이 기능을 어떨때 쓰냐구?
본인은 의도적으로 써본적은 없고, 다만 생각을 좀 해보면

과거 커밋의 내용 확인 정도가 있지 않을까 싶다.

 

어떤 블로그에서는 GUI에서 잘못 더블클릭 했다가 checkout 기능이 되어버려

당황했다고도 한다.