Data-Driven System Development/Git

Git Stash: 작업 중인 변경사항 잠깐 보관하기

Data Jun 2025. 3. 26. 10:05

Git을 쓰다 보면 이런 상황, 다들 한 번쯤 겪어봤을 거예요.

“아직 작업 다 안 끝났는데… 다른 브랜치로 잠깐 이동해야 해!”
“커밋하기엔 이른데, 코드는 날리고 싶지 않아…”

이럴 때 등장하는 강력한 기능이 바로 **git stash**입니다.

 

git stash란?

stash는 현재 작업 중인 변경사항(커밋 안 된 것들)을 임시로 저장해두는 Git의 기능이에요.
말 그대로 “작업 내용을 잠깐 보관하는 바구니”라고 생각하면 됩니다!

 

기본 사용법

🔹 변경사항 임시 저장

git stash

 

  • tracked 파일의 변경사항만 저장됨
  • 워킹 디렉토리는 깨끗한 상태로 돌아감

🔹 저장한 작업 다시 꺼내기

git stash pop

 

가장 최근 stash 내용을 꺼내서 적용하고, stash에서 제거함

git stash apply

적용만 하고 stash에 남겨둠

 

 

자주 쓰는 명령어 모음

 

예시 시나리오

  1. feature/login 브랜치에서 작업 중
  2. 급하게 main 브랜치로 이동해야 함
  3. 아직 작업은 미완성…
# 변경사항 임시 저장
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의 철학입니다.