본문 바로가기
Git⛓️

git: stash

by ZZiwon Choi 2024. 7. 2.

stash: 감추다, 숨기다

git에서 stash는 working directory의 변경사항을 감춘다.

-> 현재 작업하던 내용을 어딘가에 숨겨놓는다.

 

Why use it?

- 변경 사항 일시 저장

- 다른 branch로 checkout할 때 현재 branch의 변경사항을 유지하고싶을 때

예를 들어 현재 작업을 하고 있는 브랜치가 아닌 다른 브랜치에 수정해야 할 것이 있는데, 현재 브랜치의 변경사항은 아직 커밋하고 싶지 않을 때! 사용하면 좋다. 현재 브랜치에서 커밋을 하지 않으면 checkout이 안되기 때문에 stash하고 다른 브랜치로 checkout 🚪

 

명령어 

git stash [save] : stash 한다.

git list: stash 목록을 보기

git stash apply [stash 이름]: stash한 것을 불러온다.(stash 이름을 안붙이면 가장 최신 stash만 가져옴)

git stash show: 단순히 list만 보는것이 아닌 stash의 내용까지 상세히 볼 수 있다.

git stash drop [stash 이름]: stash를 삭제한다. (stash 이름을 안붙이면 가장 최신 stash만 삭제)

git stash pop [stash 이름]: apply+drop 

 

❓❔

a.txt를 stash 하고 b.txt를 stash 했을때

어떤 stash가 a.txt이고 b.txt일까? 

-> 정답은 stash@{0}이 b.txt이다. stash list 했을때 가장 위에 뜨는 것이 가장 최신 stash라고 생각하면 쉽다.

 

❓❔

stash apply 하고 커밋을 하려고 한다. add를 하고 커밋을 해야될까? 아니면 이전에 했던 add가 그대로 stash 되어서 그냥 커밋하면 될까? (참고로 stash는 add한 파일만 stash 할 수 있다. 즉, staged 상태인 파일만 stash 가능하다.)

 

-> 정답은 add를 다시 해줘야 한다. apply로는 staged 상태였던 파일을 자동으로 다시 staged 상태로 만들어주지 않는다. 

하지만, apply를 할때 --index를 붙여주면 staged 상태까지 복원된다. 이를 통해 원해 작업하던 파일의 상태로 돌아올 수 있다.

git apply --index