TIL - Git : detached HEAD 문제 해결방법

신혜린·2023년 8월 1일
0

TIL

목록 보기
2/19
post-thumbnail

🤯 storybook을 공부하느라 레포를 생성하고 인트로를 보며 따라하던 도중 갑자기 push가 되지 않고 브랜치가 main을 가리키는 게 아니라 특정 커밋을 가리키는 문제가 발생했다.

Detached HEAD?

HEAD가 특정 branch가 아닌 특정 commit을 직접 참조하고 있는 상태

HEAD는 일반적으로 이름이 붙여진 branch를 참조한다 (예: main).
참조하는 동안 각 브랜치는 특정 commit을 참조한다.
그러나 HEAD가 브랜치를 참조하는 게 아니라 커밋을 직접 참조하고 있는 경우, 이를 detached HEAD 상태라고 한다.

HEAD -> branch -> commit (attached HEAD state)
HEAD -> commit (detached HEAD state)

  • Detached HEAD 상태에서 새롭게 생성된 커밋은 참조하는 브랜치가 없기 때문에 다른 브랜치로 checkout하게 되면 해당 커밋은 가비지 콜렉터에 의해 삭제된다.
  • 보통 해당 레포에 기록을 남기지 않고 시뮬레이션을 해보고 싶을 때 detached 상태를 이용하지만, Git에서는 지향하지 않는 상태 - 대신 테스트 브랜치를 생성해서 해볼 것을 권장함.

Detached HEAD 해결방법

1. 임시 브랜치 생성

git branch temp
git checkout temp

2. force 로 브랜치를 main > temp 강제 이동

git branch -f main temp
git checkout main
  • main 브랜치를 temp 브랜치의 가장 최신 커밋으로 이동 시킨다.
  • 위 명령어를 사용하면 main 브랜치가 temp 브랜치가 가리키는 커밋으로 덮어씌워진다.
    주의해야 할 점은, 이 명령어는 강제로 브랜치를 이동시키기 때문에 기존의 커밋 히스토리가 변경될 수도 있다는 점이다. (협업을 하고 있을 경우 팀원들과 협의한 후 사용하는 것 추천)

3. 임시 브랜치 삭제

git branch -d temp

4. 커밋 푸시

git push

위의 일련의 과정을 거치고 나면 HEAD가 다시 attached 상태로 변경된다.

profile
개 발자국 🐾

0개의 댓글