개발하다 보면 아직 커밋하기 애매한 작업이 있는데 다른 브랜치로 이동해야 하는 상황이 생긴다. 이런 상황에서 필요한 게 git stash다.
git stash는 현재 작업 중인 변경사항을 임시로 보관해 두고 워킹 디렉토리를 깨끗한 상태로 만드는 기능이다. 이후 언제든지 다시 가져와 이어서 작업할 수 있다.
git stash의 특징

많이 헷갈리는 부분인데, git stash는 특정 브랜치에 묶이지 않는다.
즉 다음과 같이 사용 가능하다.
- 브랜치 A에서 stash 생성
- 브랜치 B로 이동
- 브랜치 B에서 stash 적용
stash는 레포지토리 단위로 관리되는 stack 구조이다.
stash는 stack 구조로 저장된다
stash는 여러 개가 쌓이며 저장된다. 다음 명령으로 확인해보자.
git stash list
결과:
stash@{0}: WIP on feature/tab: ...
stash@{1}: WIP on develop: ...
- 가장 최근 stash: stash@{0}
- 아래로 갈수록 오래된 stash
- LIFO 구조 (stack)
stash 적용 방법
1) apply: 적용만 하고 stash는 유지
git stash apply
git stash apply stash@{1} # 특정 stash만 apply
2) pop: 적용하면서 stash 제거
git stash pop
git stash pop stash@{1} # 특정 stash만 pop
stash 삭제
git stash drop
git stash drop stash@{1} # 특정 stash만 drop
untracked file은 포함되지 않는다
많이 헷갈리는 부분이다. git stash는 기본적으로 tracked 파일 변경사항만 저장한다.
untracked, ignored 파일은 포함되지 않는다.
그래서 이걸 모른다면 이런 상황이 발생할 수 있으니. . ㅠㅠ 주의!
브랜치 A에서 새 파일 생성
→ git stash
→ 브랜치 B로 이동
→ stash 적용
→ 파일이 없음
untracked 파일까지 stash하는 방법
새 파일까지 포함하려면 -u 옵션을 붙여야 한다.
git stash -u
# or
git stash --include-untracked
ignored 파일까지 포함하려면
빌드 아티팩트 같은 ignored 파일까지 포함하려면 -a 옵션을 붙인다
git stash -a
options for stash:
git stash → tracked 변경만
git stash -u → untracked 포함
git stash -a → ignored 포함
정리
git stash:
- 작업 중 변경사항을 임시 저장하는 기능
- 브랜치와 무관하게 레포지토리 단위로 관리됨
- stack 구조
- 쌓인 stash는 그대로 두고 적용하려면 apply, 하나씩 꺼내 적용하려면 pop
- 기본적으로 untracked 파일은 포함하지 않음
'Dev & Study' 카테고리의 다른 글
| [git] merge 되돌리는 방법 (0) | 2026.03.03 |
|---|---|
| [npm] peerDependency strictness란 (0) | 2026.03.03 |
| Next.js가 삭제된 파일을 계속 참조하는 문제 (.next 캐시 삭제 방법) (0) | 2026.03.02 |
| [Next.js] next-env.d.ts가 자꾸 바뀌는 문제 (0) | 2026.03.02 |
| [git] rebase란? merge와의 차이점, rebase 후 push 방법 (0) | 2026.03.02 |