welcome to sisi's space! ‎ε(*⌒▽⌒)੭*゚¨゚゚・*:..☆

Dev & Study

[git] stash: 브랜치 이동 시, 하던 작업을 잠시 치워두는 법

Sisi_ 2026. 3. 2. 23:09

개발하다 보면 아직 커밋하기 애매한 작업이 있는데 다른 브랜치로 이동해야 하는 상황이 생긴다. 이런 상황에서 필요한 게 git stash다.

git stash는 현재 작업 중인 변경사항을 임시로 보관해 두고 워킹 디렉토리를 깨끗한 상태로 만드는 기능이다. 이후 언제든지 다시 가져와 이어서 작업할 수 있다.


git stash의 특징

많이 헷갈리는 부분인데, git stash는 특정 브랜치에 묶이지 않는다.

즉 다음과 같이 사용 가능하다.

  1. 브랜치 A에서 stash 생성
  2. 브랜치 B로 이동
  3. 브랜치 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 파일은 포함하지 않음