reset --hard로 삭제한 커밋 git reflog를 이용해 살리기

Sony·2020년 4월 30일
10

Git

목록 보기
2/2
post-thumbnail

git reflog

실수로 reset --hard로 파일을 지운 경우 위 명령어를 이용해 복원할 수 있다.

전체적인 과정은 다음과 같다.

  • git reflog로 이전 커밋 목록을 띄운다
  • 복원하고 싶은 커밋으로 checkout 한다.
  • 커밋에 checkout 한 상태이기 때문에 Detached HEAD 상태가 된다.
  • 복원하고 싶은 커밋에서 git branch backup 명령어로 브랜치를 만든다. (브랜치 이름이 꼭 backup일 필요는 없다. 원하는 브랜치 이름으로 해도된다.)
  • backup 브랜치로 checkout한다.
  • 복원하고 싶은 커밋 내역이 backup 브랜치에 생성된 걸 확인할 수 있다.

예시

위 커밋 로그에서 e26d1b0 커밋 전까지 reset --hard로 삭제한다.

git reset --hard HEAD~4
or
git reset --hard e26d1b0

e26d1b0 이전 커밋까지 삭제 된 것을 확인할 수 있다.
reset --hard로 삭제한 커밋을 복원하려면 어떻게 해야할까?
git reflog 명령을 사용하면 된다.

1. git reflog로 이전 커밋 내역 출력

git reflog

위 명령어를 치면 아래와 같이 이전 커밋 목록이 모두 출력된다.

2. 복원하고 싶은 커밋으로 체크아웃

복원하고 싶은 커밋으로 checkout 한다.
우리는 reset --hard를 하기 바로 직전 커밋인 59f97b6를 복원하고 싶다.
따라서 아래와 같이 입력하자.

git checkout 59f97b6

59f97b6 커밋으로 체크아웃 한 상태이다. (detached-HEAD 상태)

Note: switching to '59f97b6'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

3. 새로운 브랜치 생성 및 체크아웃

새로운 브랜치를 생성한다.

git branch backup   // 브랜치 이름이 꼭 backup일 필요는 없다. 

backup 브랜치로 checkout한다.

git checkout backup

위와 같이 이전 커밋 내역들이 복원된 backup 브랜치가 생성된 걸 확인할 수 있다.

이제는 reset --hard로 이전 커밋을 삭제했다고 해서 좌절할 필요 없다. git reflog를 이용해 다시 복원할 수 있다. :)

Reference

profile
개발하며 배운점과 회고를 남기는 공간입니다.

0개의 댓글