DEV

[GIT] git reflog를 이용하여 git reset한 내용 원복하기

개발하는 이령 2023. 5. 6. 02:16

 

자꾸 같은 실수를 반복해서 메모용으로 작성해둔다 ㅎ

 

 

 

커밋 메세지에 오타를 냈다거나

커밋에 미처 포함하지 못한 작업 내용을 뒤늦게 발견하는 경우

해당 커밋을 작성하기 이전으로 돌아가기 위한 방법으로 reset을 자주 사용하고 있었다.

$ git reset HEAD^ --soft
// HEAD^ : 바로 직전(한 단계 이전)으로 돌아감
// --soft : 직전 작업을 staged에 가져옴

reset 이후 staged로 저장된 직전 커밋의 내용

 

 

 

문제는 이렇게 돌아가고나니깐 수정할게 없는 경우 (...)

즉, 다시 reset하기 이전으로 돌아가고 싶은 경우다.

 

staged에 작업이 들어가 있으니 다시 커밋할 수도 있지만

이 경우는 커밋 시간을 새로 갱신하는 것이기 때문에 이를 원하지 않는 경우가 종종 발생했다.

 

때문에 다른 해결 방법으로 reflog를 활용한다.

 

 

 

git reflog

: 로컬 저장소에서 HEAD의 업데이트 기록을 출력하는 명령어

$ git reflog

로컬에서 사용한 명령어들이 최신순으로 나열됨

 

 

reflog를 이용하면 로컬에서 내가 사용한 명령어들이 나열되는데

나는 git reset HEAD^ 하기 이전으로 돌아가고 싶은 것이니 HEAD@{0}을 확인하면 된다.

 

 

 

이를 이용해서 git reset을 다시 활용한다.

$ git reset HEAD@{0} --hard

처음 reset 하기 이전으로 원상복구

 

 

여기서 하나, --hard로 싹 밀어버리기 때문에 로컬에서 커밋하지 않은 작업 내용은 사라질 수 있으니 주의하자!

맨 처음 Changes에 있던 작업 내용도 말끔히 사라진게 이런 경우다 (실수다)