git reflog
실수로 reset --hard
로 파일을 지운 경우 위 명령어를 이용해 복원할 수 있다.
전체적인 과정은 다음과 같다.
git branch backup
명령어로 브랜치를 만든다. (브랜치 이름이 꼭 backup일 필요는 없다. 원하는 브랜치 이름으로 해도된다.)위 커밋 로그에서 e26d1b0
커밋 전까지 reset --hard
로 삭제한다.
git reset --hard HEAD~4
or
git reset --hard e26d1b0
e26d1b0
이전 커밋까지 삭제 된 것을 확인할 수 있다.
reset --hard
로 삭제한 커밋을 복원하려면 어떻게 해야할까?
git reflog
명령을 사용하면 된다.
git reflog
로 이전 커밋 내역 출력git reflog
위 명령어를 치면 아래와 같이 이전 커밋 목록이 모두 출력된다.
복원하고 싶은 커밋으로 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.
새로운 브랜치를 생성한다.
git branch backup // 브랜치 이름이 꼭 backup일 필요는 없다.
backup
브랜치로 checkout
한다.
git checkout backup
위와 같이 이전 커밋 내역들이 복원된 backup 브랜치가 생성된 걸 확인할 수 있다.
이제는 reset --hard
로 이전 커밋을 삭제했다고 해서 좌절할 필요 없다. git reflog
를 이용해 다시 복원할 수 있다. :)