본문 바로가기

git

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

728x90

프로젝트를 진행하면서 reset --hard 로 커밋을삭제하면  원래 기존의  status 값을 반환해주는 줄 알았는데

아니었다... 결국에는  reset --hard 로 내가 작업한 영역이 사라졌다. 어떻게 다시 내가 작업한 영역을 가져올지 서칭을 통해

알게되었다.

 

git reflog

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

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

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

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를 이용해 다시 복원할 수 있다. :)

728x90

'git' 카테고리의 다른 글

github 자주쓰이는 명령어 정리  (0) 2023.07.13
git checkout 갱신  (0) 2023.04.28