크고 작은 문제들/사소한 실수

[Git] 실수로 git stash drop했을 때 되돌리는 방법

노새두마리 2025. 2. 19. 23:55

잠시 우선 순위가 밀렸던 작업을 처리하기 위해 기분 좋게 커맨드를 입력한다. 머리는 git stash pop...을 생각하고 있으나 손은 git stash drop을 입력하고 엔터를 누른다.

머릿속을 스치는 지난 시간의 기억. 철렁 내려앉는 가슴. 실수로 stash 내역을 drop했을 때 복구하는 방법을 공유하고자 합니다. 꼭 실수가 아니더라도 당장 필요하지 않을 것 같아서 과감히 drop했던 변경사항이 나중에 필요해지는 경우도 있을 수 있으니 알고 있으면 나쁘지 않을 것 같습니다.

git stash apply <hash>

git stash drop 명령어를 실행하면 drop된 stash의 해시가 출력됩니다. 이 해시를 그대로 복사해서 git stash apply를 실행시키면 해당 stash에 기록된 변경사항을 적용할 수 있습니다.

drop한 이후 시간이 지나서 해시를 바로 확인할 수 없는 경우에는 다음의 방법을 사용합니다.

git fsck --unreachable | grep commit | cut -d" " -f3 | xargs git log --merges --no-walk --grep=WIP

각 커밋 내역의 상단에 위치한 해시를 이용하여 git stash apply <hash> 명령어를 실행합니다.

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


재현

아래의 단계를 따릅니다.


1. Git 저장소 초기화

디렉토리 생성

mkdir git-stash

Git 저장소 초기화

git init

파일 생성

echo '좋은 하루 되세요!' > README.md

최초 커밋 - 커밋이 없으면 stash 명령어를 실행할 수 없습니다.

git add . && git commit -m "Initial Commit"

2. 파일 수정 및 stash

README.md 파일을 열어 다음과 같이 제목을 추가한 뒤 저장합니다.

# Git Stash

좋은 하루 되세요!

변경사항을 임시로 저장합니다.

git stash

방금 추가한 제목이 사라졌다면 정상적으로 실행된 것입니다. git stash show를 입력하면 가장 최근에 stash된 변경사항의 요약을 확인할 수 있습니다.

stash를 drop합니다.

git stash drop

drop 직후에 drop된 stash의 해시가 표시됩니다. 이 해시를 복사합니다.

git stash apply를 실행하여 drop된 stash의 변경사항을 적용합니다.

git stash apply <hash>

drop으로 제거되었던 stash에 포함된 README.md의 변경사항이 복원되었음을 확인할 수 있습니다.