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을 사용할 때 흔히 마주치는 상황이지만, 이 두 명령어를 잘 활용하면 언제든 안전하게 작업을 이어갈 수 있습니다.
'DevOps > Git' 카테고리의 다른 글
[Git] Git 실무에서 자주 쓰는 상황과 명령어 조합 (0) | 2025.05.07 |
---|---|
[Git] 커밋 되돌리기 : reset, revert (0) | 2025.04.30 |
[Git] Git 브랜치 전략 : 팀 환경에 맞는 전략 선택과 운영 방법 (0) | 2025.04.26 |
[Git] 브랜치 통합 : merge, rebase, cherry-pick (0) | 2025.04.23 |
[Git] 브랜치 전략 이해 : branch, checkout, switch, restore, fetch (0) | 2025.04.19 |