도구들/Git

Git Stash 사용법 알아보기

노랑✨ 2025. 3. 15. 20:56

작업 중에 잠시 다른 브랜치를 들러서 확인할 일이 있다거나, 잠깐 하던 작업이 없던 시점의 상태를 다시 보고 싶다거나, 여태 하던게 방향이 잘못된거 같아서 다 날리지만 코드 자체는 일단 어디 두고 싶은... 때가 있지요, 그럴때 자주 사용하는게 Git Stash 일텐데요, 오늘은 Git Stash 의 사용법에 대해서 한번 정리해보려고 합니다! (왜냐하면 제가 그동안 pop 만 쓰다가 최근에 apply 를 배웠기 때문..!)

 

조금 뻔한 전개 같긴 하지만... 새삼 영어 단어 의미가 궁금해서 한번 찾아봤는데요.

아래와 같은 뜻이라고 합니다. 임시로 하던 일을 잠시 치워놓는 느낌의 명령어로 알맞은 것 같네요.

 

터미널을 이용해 테스트 파일을 만들면서 기본 사용법을 한번 알아봅시다!

 

1. 변경 사항 저장:

git stash

현재 작업 중인 변경 사항이 임시로 저장되고, 작업 디렉토리는 마지막 커밋 상태로 돌아갑니다.

testfile 에 수정이 발생했습니다.
git stash 를 하면, 수정 내용이 사라집니다. 어딘가에 저장해두었다고 하는 것 같네요

표시된 안내문구를 살펴보면, 아래와 같이 생각할 수 있을 것 같습니다.

Saved working directory and index state: 작업 디렉토리(Working Directory)와 인덱스(Index, 스테이징된 변경 사항)의 상태를 저장

WIP (Work In Progress): 진행 중

on main: 현재 브랜치 (main)

787b435 1st commit : 현재 브랜치의 마지막 커밋의 커밋 ID 와 그 메세지 

 

2. 저장된 stash 목록 보기:

git stash list

stash로 저장된 항목의 목록을 확인할 수 있습니다.

저장 목록을 확인!
.git 폴더의 logs>refs>stash 에도 같은 내용이 기록된 것을 볼 수 있습니다.
stash 를 여러번 하면 작업 내용이 쌓이게 되겠죠? 헷갈리겠지만 여기 터미널 결과랑 stash 파일의 작업 순서는 반대임!

 

3. 저장된 변경 사항 적용 (stash pop):

git stash pop

가장 최근에 저장된 stash를 다시 적용합니다. pop 이라는 이름에서 알 수 있듯 stash 는 stack 형태로 리스트를 관리하는데요, pop 은 가장 최근에 들어간 내용을 불러오고, 또 stash 목록에서 제거합니다.

pop 하면 가장 최근에 작업한 내용이 복원됩니다.
list 를 다시 확인해보니 2번 작업이 사라져있는 것을 확인해볼 수 있습니다. 하지만!! 2번 작업이 사라진게 아니라 실제로는 0번 작업이 사라진거고, 인덱스가 하나씩 위로 올라간 것입니다. 다시 말하지만 stash list 와 stash 파일의 순서는 반대임!

 

4. 특정 stash 적용 (stash apply):

git stash apply stash@{n}

apply 또한 별도 인덱스 지정이 없다면 가장 최근에 저장된 stash를 다시 적용합니다. 다만 pop과 달리 stash 목록에서 해당 데이터를 제거하지 않습니다.

별도 인덱스 지정 없이 apply 해봅니다.
pop 했을 때와 동일하게 가장 최근 작업이 불러와지지만, list 에서 해당 stash 데이터는 사라지지 않습니다.

 

stash@{n}git stash list에서 확인한 인덱스를 사용합니다. <📍 인덱스가 0 에 가까울수록 최신 작업!>

 

5. 메시지와 함께 stash 저장:

git stash save "메시지"

stash 만 하니까 너무 헷갈리죠. 나중에 쉽게 알아볼 수 있도록 메시지를 추가할 수 있습니다.

ABCDE 라고 이름을 붙이면 마지막 커밋 정보 대신 이름이 붙습니다.
list 에서도 같은 내용을 찾아볼 수 있습니다.

git stash list 결과상으로는 Parent Commit 정보가 사라지는 것 아닐까? 라고 생각할 수도 있지만, 이곳에서의 message 는 단지 해당 stash 에 라벨을 붙여주는 역할을 할 뿐, Parent Commit 정보는 내부적으로 가지고 있기 때문에 여전히 apply 해서 가지고 올 수가 있다고 합니다. (.git 폴더의 objects 파일 내부에서 해당 커밋과 관련 메타데이터를 관리하고 있음!)

 

6. stash 제거 (특정 stash, 모든 stash) :

git stash drop stash@{n}
git stash clear

필요없어진 작업내용이 있다면  stash를 삭제합니다. stash 해놓고 잊혀진 코드들이 잠들어 있을 수 있으니까요!

clear 하면 logs>refs>stash 파일 자체가 사라지네요!
했..했어...없앴어...

 

매번 git stash / git stash pop 만 써왔는데, stash 자체에도 여러가지 기능이 있었네요! 이 밖에도 staging 된 부분만 stash 하기, 특정 파일만 stash 하기 등 다양한 기능이 있어서 여러모로 쓰기 좋을 것 같습니다. 익숙해지면 이제 나도 stash 의 달인!(좋은건가?)