05. stash

stash

만약 내가 어느 기능을 개발하고 있다고 가정해보자. 근데 중간에 다른 급한 버그가 생겨 이 버그를 먼저 처리하는게 우선시 되었다.
버그를 수정하기 위해 bug branch를 따로 만들어 진행을 해야하는데, branch를 바꾸기 위해서는 지금 개발하고 있는 코드를 commit등으로 저장을 해야한다.
그러나 단순히 branch를 변경하기 위해서 commit을 남발하는 것은 좋지 못하다. 이럴 때 사용할 수 있는 것이 stash다.
즉, stash는 임시 저장의 개념이다!!

stash 명령을 사용하면 work tree에서 수정한 파일들만 저장한다. stash는 상태가 modified이면서 tracked 상태인 파일과 staging area에 있는 파일들을 보관해두는 장소다. 아직 끝내지 않은 수정사항을 스택에 잠시 저장했다가 나중에 다시 끝낼 수 있는 것이다.

예를 들어 branch1에서 profile.txt 파일을 수정 중에 todoList.txt 파일을 수정해야 하는 일이 생겼다.
이를 위해서 branch2로 변경하여 작업이 필요한 상황이다. 따라서 branch2로 전환하려하면 다음과 같은 에러메시지가 출력된다.
Pasted image 20231010145047.png|500
branch를 전환하기 위해서는 commit이나 stash가 필요하다고 한다. 그러나 단순히 branch를 전환하기 위해 불필요한 commit을 할 필요가 없다. 따라서 stash 명령어를 써보자.

git stash
git stash save <작업명>

Pasted image 20231010145303.png|500
e86b043이라는 아이디로 임시저장되었고, working direcotry가 깔끔해졌다. 이제 branch를 전환할 수 있다.

저장된 stash 목록은 다음과 같은 명령어로 확인할 수 있다.

git stash list

Pasted image 20231010145712.png|500

stash 복원하기

이제 임시 저장한 stash를 다시 복원해보자

git stash apply

Pasted image 20231010145901.png|500
git stash apply는 가장 마지막에 저장한 stash를 복원하고, 기록을 그대로 남겨 놓는다.
만약 stash 기록을 지우기 위해서는 다음과 같은 명령어들을 사용한다.

git stash drop #가장 최근에 저장한 stash 삭제
git stash drop stash@{숫자} #특정 stash 삭제
git stash clear # 모든 stash 기록 삭제
git stash pop # git stash apply + git stash drop

다음 글: 06. rebase