Git
HEAD 브랜치, 지워진 커밋 복구하기 | reflog
신림쥐
2023. 12. 19. 09:14
728x90
개요
Git을 사용하다 보면 실수로 커밋을 날리거나, 잘못된 브랜치 삭제 등으로 당황할 수 있습니다. 하지만 Git은 의외로 관대합니다. 바로 reflog라는 기능 덕분에 지워진 것처럼 보이는 커밋도 복구할 수 있습니다.
이번 포스팅에서는 reflog를 활용해 지워진 커밋과 HEAD 브랜치를 복구하는 방법을 알아봅니다.
reflog은 개발자의 구명조끼입니다. 실수했다고 좌절하지 말고, 로그를 믿으세요!
git reflog
git reflog는 HEAD가 이동한 모든 기록을 추적합니다. 커밋, 리셋, 체크아웃 등 Git의 모든 HEAD 이동 내역이 이 로그에 남아 있습니다.
이때 reflog 이력은 아래와 같은 상황에서 이전 상태로 되돌아갈 수 있는 단서가 될 수 있습니다.
- git reset --hard로 실수로 커밋을 날렸을 때
- git commit --amend로 이전 커밋이 덮여버렸을 때
커밋 날림시 복구하기
1. git reflog으로 커밋 해시 확인하기
git reflog로 되돌리고 싶은 커밋 해시를 확인합니다.
git reflog
# 예시 출력
c4f7f19 HEAD@{0}: reset: moving to HEAD~1
a12b5ee HEAD@{1}: commit: 로그인 기능 구현
3e9ac2a HEAD@{2}: commit: 버튼 스타일 수정
...
리스트를 다 확인했다면, 키보드에서 :q를 입력해 reflog 화면을 종료할 수 있습니다.
c4f7f19 HEAD@{0}: reset: moving to HEAD~1
a12b5ee HEAD@{1}: commit: 로그인 기능 구현
3e9ac2a HEAD@{2}: commit: 버튼 스타일 수정
...
:q
2. 커밋 해시 기준으로 checkout
해당 커밋으로 checkout하거나 새로운 브랜치를 만들어 복구합니다.
# 특정 커밋 체크아웃
git checkout a12b5ee
# 혹은 브랜치로 복구
git checkout -b restore-branch a12b5ee
HEAD 브랜치를 삭제시 복구하기
1. git reflog으로 커밋 해시 확인하기
git reflog
# HEAD@{3}: checkout: moving from main to develop ← 이런 로그를 찾습니다.
2. 커밋 해시 기준으로 checkout
git reflog로 HEAD가 마지막으로 main을 가리키던 시점을 찾아 그 시점으로 브랜치를 다시 생성합니다.
git checkout -b main HEAD@{3}
이전 상태로 되돌리기
1. git reflog으로 커밋 해시 확인하기
git reflog
# HEAD@{3}: checkout: moving from main to develop ← 이런 로그를 찾습니다.
2. reset 명령어를 사용하여 커밋 상태를 복구
merge한 내용, 브랜치 삭제된 내용도 해당 시점으로 돌아집니다.
git reset --head e2all8a
// git reset --head [commit id]
git reset --head HEAD@{1}
// git reset --head [HEAD@{id}]
728x90