이번엔 페어프로그래밍을 하면서 해결한 오류인
Detached HEAD에 대해 기술하고자 한다.
그 때 당시를 기억 하자면,
파일을 수정하고 커밋을 한 뒤, remote에 페어의 repo를
추가하고, 이후 페어의 repo에 push를 했을 때 생겼던 오류인거 같다.
push를 했을 때 detached head 상태에 있다고 reject처리 되었다.
그 때 당시 첨보는 오류라 당황했고, 구글링해서 바로 해결은 했지만,
detached head에 대해 더 자세히 알아보고자 한다.
일단 해결방법은 간단하다.
새로운 branch를 하나 만든 뒤 checkout하고,
다시 원래 branch로 checkout하면 끝이다.
Detached Head란, 말 그대로 head가 (branch로부터) 떨어져있는 상태를 뜻한다.
즉, branch를 통해서가 아니라 직접 다이렉트로 commit을 참조하고 있는 상태를 뜻한다.
여기서 git checkout "revision number"를 통해 특정 commit으로 checkout 할 경우
detached head 상태가 된다고 한다.
그래서 한번 해 보았다.
우선 old, new commit이 존재하고,
각각 n.md 파일이 존재한다.
old에선
이라고 되어 있고,
new에선
이라고 되어 있다.
현재 HEAD는 8f3a708(new)를 가리키고 있고,
이 상태에서 b1ca268(old)로 checkout을 했을 때,
경고메시지(?)가 출력되었다.
해당 부분을 해석하면,
이 상태에서 아무 수정이나 가능하며, 이 상태에서 생성한 commits이나 변경사항은 다른 branch로 checkout을 통해
어느 branch에도 영향을 주지 않고 버릴 수 있다.
고 한다.
그래서 detached branch라고 하는거 같다.
status를 살펴보면,
이와 같고,
이 때 n.md의 파일 상태는 역시 old의 것과 같다.
이 상태에서 기존 branch명으로 checkout을 하면
이전 HEAD 상태를 언급해주고,
파일의 상태는
new의 것으로 돌아왔다.
그리고,
아래 부분의 의미는
특정 revision number로 checkout을 한 뒤,
파일을 수정하고 checkout을 하면 수정사항이 날라가므로,
이를 보존하기 위한 방법이다.
다시 old commit으로 checkout 하고, 파일을 수정
이후 해당 방법으로 switch
그리고 git branch
새로 branch가 생성되었고,
HEAD도 정상적으로 돌아왔고, 생성된 branch를 가리킨다.
(add와 commit을 안했기에, unstaged 상태)
detached head 상태를 알아보기도 했고,
해당 상태를 switch를 통해 다루는 방법도 알아 보았지만,
특정 시점으로 reset을 하는 방법이 있는데
왜 사용할까에 대한 답은 모르겠다.
또한, 페어와 협업을 할 때 이 현상이 나타났었는데,
나는 revision number로 checkout을 한 적이 없었기 때문에,
아직 왜 발생했는지에 대한 답도 모르겠다.