본문 바로가기
DevOps/Git

[Git] 작업 복구와 임시저장 : reflog, stash

by okbear3 2025. 5. 3.

Git을 사용하다 보면 다음과 같은 상황이 자주 발생합니다.

  • "reset --hard 쳤는데 작업이 날아갔어!"
  • "잠깐 다른 브랜치로 가야 하는데, 지금 하던 건 아직 미완성이야"
  • "며칠 전에 삭제한 브랜치를 복구하고 싶어"

이런 경우, Git의 강력한 복구 기능인 reflog와 작업을 임시 저장하는 stash를 알고 있으면 훨씬 유연하게 작업을 이어갈 수 있습니다.


reflog – 히스토리 복구의 마지막 보루

git reflog는 Git이 내부적으로 관리하는 브랜치의 이동 기록을 보여주는 명령어입니다.
이력을 되돌리거나 실수로 삭제한 브랜치나 커밋을 복구할 때 매우 유용합니다.

예를 들어 reset --hard를 실행해도, reflog를 통해 이전 상태로 돌아갈 수 있습니다.

#히스토리 목록 보기
git reflog 

#HEAD가 가리키던 과거 커밋으로 돌아가기
git checkout HEAD@{2}

#실수로 지운 커밋 복원
git reset --hard HEAD@{3}
  • reflog 는 로컬에서만 작동하며, 기본적으로 약 90일 간 저장됩니다.

 

stash – 작업 중 변경사항 임시 저장

git stash는 현재 작업 중인 변경 사항을 임시로 저장하고 워킹 디렉토리를 초기화합니다.
브랜치를 전환해야 하지만 아직 커밋할 수 없는 상태라면, stash를 사용해 안전하게 작업을 보관할 수 있습니다.

git stash
명령어 설명
stash 변경된 tracked 파일만 임시 저장 (default)
stash -u 변경 사항 + untracked 파일까지 포함하여 저장
stash -all 변경 사항 + untracted + ignored 파일까지 모두 포함하여 stash 합니다.
stash list 저장된 stash 목록을 확인
stash show stash@{n} -p 특정 stash의 상세 diff 내용 확인
stash apply 가장 최근 stash를 현재 브랜치에 복원 (stash는 유지됨)
stash apply stash@{n} 특정 stash를 현재 브랜치에 복원
stash pop 가장 최근 stash를 복원하고 해당 stash 항목을 삭제
stash drop stash@{n} 특정 stash 항목을 삭제
stash branch [브랜치 명] 새 브랜치를 만들고, stash 내용을 적용 (작업 분기 시 유용)
stash clear 저장된 모든 stash 항목을 삭제 (되돌릴 수 없음, 주의)
  • stash는 임시 저장만을 위한 도구이므로, stash된 내용은 최대한 빨리 커밋하거나, 제거하는 것이 좋습니다.
  • stash apply 이후에도 stash 파일은 여전히 스택에 남아있기 때문에 해당 stash를 stash drop을 이용하여 제거해야 합니다.

실수로 작업을 날렸을 때나, 잠시 다른 작업으로 전환해야 할 때 reflog과 stash는 든든한 도구가 되어줍니다.
Git을 사용할 때 흔히 마주치는 상황이지만, 이 두 명령어를 잘 활용하면 언제든 안전하게 작업을 이어갈 수 있습니다.