개발하는 자몽

[Git] 사라진 커밋(commit) 복원하기 본문

Git

[Git] 사라진 커밋(commit) 복원하기

jaamong 2023. 4. 16. 13:28

깃에서 rebase를 하다가 커밋이 사라졌다. (사라졌다 == git log를 입력했을 때 보이지 않음)

하나도 아니고 한 4개가 순식간에 사라져서 그동안 작업한 코드가 디렉토리에서 아예 사라졌었다. 심지어 local에서 remote로 push 한 것도 아니어서 당황했다. 침착하게 구글링을 해보니 역시! 방법이 있었다! 고마워요 깃을 사용하는 수많은 개발자분들...!

 

아래 명령어를 입력해보자.

git reflog

참고 reflog는 reference logs이다.

 

해당 명령어를 실행하면 git log를 입력했을 때 보이지 않던 커밋들도 나타난다. 이 내역에서 사라진 커밋을 찾고 해당 커밋의 commitID를 찾아야 한다.

 

commitID를 찾았다면 아래 명령어를 입력하여 다시 저장소로 가져오자. 나의 경우 사라진 4개의 커밋 중 가장 먼저 커밋된 것의 ID를 입력했다. 

git reset --hard commitID

입력하면 해당 ID를 기준으로 사라진 최근 커밋까지 복원된다. 

이렇게 다시 가져오면 이전에 local에서 작업한 브랜치로 가져오는 것이 아닌, 사라진 커밋을 HEAD로 하는 tree에 합류된다. 

 

사라진 커밋을 현재 브랜치로 가져오려면 아래 명령어를 입력하자.

git cherry-pick commitID

 

 

 

참고1 tree: 파일 묶음

참고2 HEAD: 트리, 마지막 커밋 스냅샷, 현재 브랜치를 가리키는 포인터

참고3 git reset: 이전 커밋으로 되돌림. 단, remote에 올라가 코드 공유를 하지 않았을 때 사용 가능.

참고4 git cherry-pick: 다른 브랜치에 있는 커밋을 내 브랜치에 적용시킴

 

 

 

 

 

출처

 

깃(Git) 에서 유실된 커밋(commit) 복원하기

깃(Git)을 이용하여 작업을 하다가 리베이스(rebase) 실수 또는 잘못된 명령어나 조작 실수 등 다양한 이유로 인해 자신의 피땀눈물이 담긴 커밋(commit)들을 날려먹는 경우가 은근히 있다. remote에 pus

www.letmecompile.com

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한

git-scm.com

 

Comments