본문 바로가기
Git

실수로 clear한 Git Stash 복구하기

by kmmguumnn 2020. 5. 11.

퇴근을 얼마 남겨두지 않은 어느 오후,

예전에 작업하던 변경분을 다시 가져오려고 IntelliJ에서 "Unstash Changes"를 열었다.

 

일단 그 전에! 이미 merge되어 필요 없어진 오래된 stash들을 drop한다는 걸...

정신이 가출했는지, 모르고 clear를 해버렸다.

 

아아.....

 

 

 

날려버린 stash들 중에는

꽤 긴 시간 작업했던 코드들이 담겨 있던 터라, 복구가 안된다면 시간 소모가 클 것 같았다.

 

 

찾아 보니 다행히 뭔가 방법이 있긴 있다.

https://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git

 

How to recover a dropped stash in Git?

I frequently use git stash and git stash pop to save and restore changes in my working tree. Yesterday I had some changes in my working tree that I had stashed and popped, and then I made more chan...

stackoverflow.com

 

 

요약하면,

 

1. 아래 명령어로 stash commit의 hash값 목록을 가져온다.

git fsck --no-reflog | awk '/dangling commit/ {print $3}' | xargs -L 1 git --no-pager show -s --format="%ci %H" | sort

 

2. 아래와 같이 최근 dangling commit들이 날짜 순으로 정렬되어 나온다.

dangling commit: 어느 브랜치나 태그로부터도 참조되고 있지 않은 커밋(stash commit도 포함).

 

3. 날짜를 보고, 내가 추적하고 있는 stash가 무엇인지 대략적으로 추측해본다.

 

 

4. 찾은 hash값으로 다음 명령어를 입력한다.

git stash apply {stash의\_hash값}

 

변경된 코드를 보고 내가 찾던 stash가 맞는지 보면 된다.

만약 아니라면 다시 rollback하고, 위에서 찾은 다른 hash값으로 똑같이 시도해보면 되겠다.

 

댓글