Git을 쓰다 보면 이런 상황, 다들 한 번쯤 겪어봤을 거예요.
“아직 작업 다 안 끝났는데… 다른 브랜치로 잠깐 이동해야 해!”
“커밋하기엔 이른데, 코드는 날리고 싶지 않아…”
이럴 때 등장하는 강력한 기능이 바로 **git stash**입니다.
git stash란?
stash는 현재 작업 중인 변경사항(커밋 안 된 것들)을 임시로 저장해두는 Git의 기능이에요.
말 그대로 “작업 내용을 잠깐 보관하는 바구니”라고 생각하면 됩니다!
기본 사용법
🔹 변경사항 임시 저장
git stash
- tracked 파일의 변경사항만 저장됨
- 워킹 디렉토리는 깨끗한 상태로 돌아감
🔹 저장한 작업 다시 꺼내기
git stash pop
가장 최근 stash 내용을 꺼내서 적용하고, stash에서 제거함
git stash apply
적용만 하고 stash에 남겨둠
자주 쓰는 명령어 모음
예시 시나리오
- feature/login 브랜치에서 작업 중
- 급하게 main 브랜치로 이동해야 함
- 아직 작업은 미완성…
# 변경사항 임시 저장
git stash
# main 브랜치로 이동
git checkout main
# 다시 돌아와서 작업 이어서 하기
git checkout feature/login
git stash pop
untracked 파일까지 저장하려면?
git stash -u # 또는 --include-untracked
git status에 빨간색으로 뜨는 새 파일도 stash 가능!
만약 특정 stash를 꺼내고 싶다면?
git stash list
결과:
stash@{0}: WIP on feature/login
stash@{1}: WIP on feature/header
stash@{2}: WIP on feature/footer
stash@{3}: WIP on bugfix/crash
stash@{4}: WIP on main
- stash@{0}이 가장 최근에 stash된 것
- stash@{4}이 가장 오래된 것
🔹 그럼 git stash pop 하면?
git stash pop
→ 딱 **stash@{0}**만 꺼내와서 작업 디렉토리에 적용하고, 스택에서 제거됩니다.
🔸 만약 특정 stash를 꺼내고 싶다면?
git stash pop stash@{2}
→ 3번째에 저장된 stash를 꺼내고 제거함
(이 경우, pop을 하면서 중간 항목이 빠지니까 인덱스가 자동으로 재정렬돼요)
또는 제거하지 않고 꺼내기만 하고 싶으면:
git stash apply stash@{2}
stash에 이름 붙이기
git stash save "login 페이지 임시 작업"
결과:
stash@{0}: On feature/login: login 페이지 임시 작업
이렇게 설명을 붙이면 나중에 어떤 작업인지 구분하기가 훨씬 쉬워져요.
마무리
git stash는 단순하지만 매우 유용한 기능입니다.
특히 브랜치 전환이 잦거나, 실험적인 작업 중에 정말 많이 쓰이죠.
“작업 중이던 코드, 잠깐만 넣어둘게요”
→ 그게 바로 stash의 철학입니다.
'Data-Driven System Development > Git' 카테고리의 다른 글
Git Cherry-pick: 원하는 커밋만 쏙쏙 골라오기 (0) | 2025.03.27 |
---|---|
Git Stash로 다른 브랜치로 작업 내용 옮기기 (그리고 바로 삭제) (0) | 2025.03.27 |
Git Rebase 완벽 가이드: 병합보다 깔끔한 히스토리 정리법 (0) | 2025.03.26 |
Git --graph로 커밋 히스토리를 시각적으로 확인하기 (0) | 2025.03.26 |
되돌아가고 싶을 땐 git reflog (0) | 2025.03.23 |