오류 발생 이유
첫 프로젝트를 마치고 부푼 마음으로 README.md 파일을 업데이트 해야겠다고 마음먹고 깃허브 리퍼지토리에서 직접 수정을 진행하였다. 처음 수정해본 파일이기 때문에 역시나 문제가 발생하였다.
깃허브에서도 수정을 하고 local에서도 파일을 수정하니 나중에 커밋 시 충돌이 발생 한 것.
당황한 나머지 어정쩡하게 알고있던 GUI인 Sourcetree를 통해 이것저것 만지다가 merge를 성공했나 싶었더니 이상한 오류와 함께 커밋이 되지 않는 상태가 발생하였다.
뭣도 몰랐던 나는 branch 그래프만 보면 이게 왜 안되는 건가 도대체... 절망스럽기만 했으나 침착하게 detached head라는 오류 메시지를 구글링해 보았다.
Detached HEAD 상태란?
출처: Dog발자 블로그 , http://sunphiz.me/wp/archives/2266
보통의 브랜치는 HEAD가 브랜치를, 그 브랜치가 리비전넘버를 가리키는 attached HEAD 상태이다. 그러나 중간의 브랜치 없이 HEAD가 직접 리비전넘버를 가리키고 있는 상태가 detached HEAD 상태이다.
위의 상태를 이해했다면 어느 정도 해결법을 유추할 수 있다.
그렇다 detached HEAD 의 브랜치를 설정해주면 다시 attached HEAD 가 되어 정상적으로 merge 할 수 있는 상태가 된다.
해결방법
우선 내가 어떤 브랜치 위에 서있는지 확인할 필요가 있다.
별표시가 되어 있는 부분이 내가 지금 위치하고 있는 브랜치. 하지만 현재 상태는 브랜치 명 대신에 이상한 문구가 써있는 이상한 상태이다.
내가 가장 걱정했던 부분은 내가 그후에 커밋했던 내용은 다 날아간 것인가..?
구글링 결과 다행히도 내가 커밋했던 내용은 사라지지 않는다라는 문구를 발견하고 안도의 한숨을 내쉬었다.
그럼 마지막으로 커밋했던 부분으로 시간(?)이동 할 필요가 있겠다.
$ git reflog
해당 명령어를 치면 내가 진행했던 깃 로그들을 간략하게 보여준다.
여기서 앞에 노란색으로 보이는 부분이 git 의 revision이다.
$ git checkout <revision>
위의 명령어를 치면 내가 커밋했던 내용의 상태로 이동 할 수 있다.
$ git checkout -b 브랜치이름
그 후에 위의 명령어로 브랜치를 만들어 현재 detached 상태를 해제하면 브랜치가 만들어지고 이후 정상적으로 merge를 진행하면 문제는 해결된다.
master브랜치로 이동 -> git merge <브랜치이름> 으로 merge 진행
뫄무리
해당 오류를 접했을 때 진짜 당황했던 기억이 난다.
현업에 있는 지인한테 전화해서 물어보기도 하고 혼자 GUI로 이것저것 만지다가 커밋이 날아간 것 같은 엄청난 절망도 느꼈다. 구글링하다 찾은 '커밋한 내용은 날아가지 않는다'는 문구가 나에게 가뭄의 단비같은 말이었다 이말이다.
팀 프로젝트 경험이 거의 없는 나로서는 git add, commit, push 말고는 사용해 본 적이 없기에 더욱 당황했던 것 같다.
하지만 정확히 어떤 이유에서 이러한 오류가 발생하였는지는 아직 의문. 이 부분에 대해서는 더 알아볼 필요가 있다.
이번 기회를 통해 git에 대해서도 더 공부할 수 있는 좋은 기회였던 것 같다.
'개발자일기 > 스쳐간 오류' 카테고리의 다른 글
[React] Minified React error #321 (0) | 2022.03.21 |
---|---|
[Javascript] keydown, keypress 너네 도대체 무슨 차이니? (0) | 2022.03.18 |