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하는 습관을 가지자!
'dev tools > Git' 카테고리의 다른 글
[Git] Git 명령어 CLI 정리 (0) | 2024.06.17 |
---|---|
[Git] 좋은 커밋 메시지 작성하기, 정책 만들기(git, commit, convention) (0) | 2024.05.22 |
[Git] Git Branch 전략- gitflow 와 네이밍 (1) | 2023.12.27 |
[Git] 깃 저장소에 commit, merge 코드 복구 하기(소스트리, gitbash) (0) | 2023.12.18 |
[Git] 로컬에서 변경한 파일명이 깃허브에서 적용 안되는 이슈 (0) | 2023.12.16 |