[GIT] 실수로 날려버린 Stash 복구하기
삭제된 Git stash 복구하기
[GIT] 깃(Git) 스태시(stash) 사용하기 - 변경된 내용 임시 저장하기
git stash는 위 링크에서 설명한 것처럼 변경된 내용을 임시로 저장해 두는 역할을 한다.
보통 특정 branch에서 작업을 하다가 일의 우선순위가 밀리거나 급하게 다른 업무를 처리해야 하는 경우 현재 작업하고 있는 내용을 커밋할 수도 없을 때 임시로 저장해 두기 위해 사용한다.
이때 사용한 stash를 지우고는 하는데, 실수로 아직 지우면 안되는 stash까지 지웠을 때 복구하는 방법에 대해 알아보자.
실제로 아무생각 없이 지우다가 필요한 것 마저 지우는 바람에 복구를 진행하였다.
삭제된 stash 목록 가져오기
다행히 나 말고도 그랬던 사람들이 있는지 생각보다 쉽게 정보를 찾을 수 있었다.
아래의 명령어를 통해 삭제된 stash 목록을 가져올 수 있다.
git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
임시로 stash를 두 개 만들어 삭제했더니 위와 같은 결과가 출력되었다.
재미있는 건 공식문서에서도 삭제된 stash 목록을 가져오는 방법에 대해 안내하고 있었다는 점이다.
공식문서에서 안내해 주는 것이기 때문에 뭔가 좀 수상한(?) 명령어 일지라도 믿고 사용해도 될 것 같다.
삭제된 stash 복구하기
GIT을 사용하다보면 항상 저 commit 옆에 있는 코드처럼 해시값이 존재하는데, 복구에도 역시 해시값을 사용한다.
# git update-ref refs/stash [Commit Hash] -m "다시 저장할 Stash 이름"
git update-ref refs/stash b0d4c27a36e6729754a485b24ef18822ca42768e -m "recoverd stash 1"
Comomit Hash값을 이용하여 복구를 진행해보면 아주 깔끔하게 stash가 복구된 것을 확인할 수 있다.
다시 저장할 stash 이름으로 저장된 것을 확인할 수 있고 (git stash list)
삭제된 stash 목록에서는 볼 수 없는것을 확인할 수 있다.
복구된 stash가 여전히 보이지 않을때
보통은 위 방법으로 복구가 될 텐데, 복구된 stash가 보이지 않는 경우가 생길 수도 있나 보다.
만약 이러한 상황이 발생한다면 아래와 같은 명령어로 다시 실행해 보자.
# git update-ref refs/stash [Commit Hash] --create-reflog -m "다시 저장할 Stash 이름"
git update-ref refs/stash b0d4c27a36e6729754a485b24ef18822ca42768e --create-reflog -m "recoverd stash 1"
나는 이러한 경우가 발생하지 않아 실제로 테스트해보지는 않았다.
(추가적으로 git이 영어가 아닐 때 역시 비슷한 문제가 발생할 수 있다는데 그 해결방법은 본문 하단 참고 링크를 확인하자.)
git stash를 사용할 때 메시지를 입력하지 않고 저장 후 나중에 git stash pop으로 작업을 자주 하고는 했는데,
좀 더 습관적으로 메시지를 입력하여 스태시를 저장하고, git stash apply로 지우지 않고 적용시키는 습관을 들여야겠다.
참고: https://dev.to/meduzen/recover-a-lost-git-stash-in-two-steps-569