본문 바로가기
dev tools/Git

[Git] 지워진 커밋 복구하기(reflog), HEAD 브랜치 삭제 복구하기

by 신림쥐 2023. 12. 19.
728x90
반응형
git reset --head 로 삭제(초기화)된 커밋 되돌리기

 

개요

origin branch로 HEAD가 있길래..

HEAD 브랜치를 삭제했었다.

삭제했을때, 로컬초기화 옵션을 선택했던거 같다..

 

결과적으로는 커밋 5건이 이력에 아예  없어져버렸고,(push 까지 한 상태였음)
코드는 오전 코드로 되돌아가고 오후 작업 코드들이 초기화 되어 있었다.

 

소스트리를 사용하고 있는데 소스트리 History에도 메시지 이력이 아예 존재하지 않았고,

gitHub에도 PR 에 불러와 지지 않았다...

 

이때 시도한 해결 방법은 다음과 같다.

 

 

복구방법

 

1. 일단 혹시 모르니 기억에 나는 대로 로컬소스를 백업한다.

 

2. 충돌을 방지하여, 로컬 소스 수정내용을 초기화 한다.

 

3. 저장소의 터미널로 들어가서 커밋 이력을 조회한다.

- git log로는 지워진 로그를 볼 수 없지만 reflog는 가능하다!

- 목록을 나갈 때는 :q

git reflog

 

 

 

4. 돌아가고 싶은 시점의 commit id 또는 HEADA{id}를 따로 copy한다.

- ex: e2all8a HEAD@{1}

 

5. reset 명령어를 사용하여 커밋 상태를 복구한다.

- merge한 내용, 브랜치 삭제된 내용도 다 돌아가진다.

git reset --head e2all8a
// git reset --head [commit id]

git reset --head HEAD@{1}
// git reset --head [HEAD@{id}]

 

6. hisotry를 확인하면, 해당 시점으로 돌아가있다.. 원하는 작업을 이어서 하면 된다.

 

결론

- 커밋이 이상하게 된 경우 merge, 삭제, pull, commit를 남발하는것보다 상태를 되돌리는 방법을 바로 시도하는게 좋을거같다.

- 나의 경우 아침에 pull, merge를 했기때문에, 코드 복구 시점을 찾기 쉬웠던더 같다. 틈틈히 merge하는 습관을 가지자!

728x90
반응형