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 |