그런데 어떤 상황에 문제가 되고, 'git stash'가 필요한 순간이 오게 될까요? 제가 생각하기엔 동시다발적으로 해야할 일들이 생기기 때문입니다.
그리고 일에 우선순위가 계속 바뀌게 됩니다. 예를 들어, 페이지네이션을 만들고 있는 중인데 급하게 다른 버그를 처리해야한다거나 우선순위가 먼저인 일들을 끝내야 할 때가 있죠. 그럴 때에는 다른 이슈에 관련된 branch를 만들게 되고 checkout(다른 브랜치로 변경) 해야할 때가 옵니다.
하지만 다른 branch로 checkout(브랜치 변경)을 하기 위해서는 꼭 commit을 해야하는데요, 아직 마무리되지 않은 작업을 그대로 commit, push 할 수는 없겠지요. 작업 중에 commit을 하고 다른 branch에 가서 다른 작업을 하다가 다시 돌아와 작업을 이어가게 되는 경우, commit의 단위가 추적용이해지지 않기 때문이죠. 이때 '임시저장' 용도로 stash가 필요하게 됩니다.
저 또한 stash와 친숙하지 않아 협업에 들어가기 전에 몇가지 테스트를 해보고 잘사용할것 같은 명령어를 정리해두려고 합니다.
$ git stash
// git stash 변경 내용 임시저장하기
$ git stash list
// 내가 stash 했던 내용 보기
$ git stash apply
// 가장 최근 stash 가지고 오기
$ git stash apply stash@{1}
// 특정 stash 가지고오기 (stash명은 stash list 참고)
$ git stash drop
// 가장 최즌 stash 지우기
$ git stash drop stash@{1}
// 특정 stash 지우기 (stash명은 stash list 참고)
$ git stash clear
// 한번에 stash 모두 지우기
참고로 stash는 계속 진행할수록 stack의 원리로 더 아래 순번으로 가게되며 더 큰 index 숫자를 갖게 됩니다.
그리고 stash는 apply 했다고 해서 자동으로 지워지지 않습니다. 그래서 stash를 가지고 온 후에도 계속해서 stash list에 남아있는것을 확인할 수 있습니다. 때문에 stash apply 해서 가지고 온 작업들을 마무리 해서 안전하게 commit 까지 했다면, stash drop 혹은 stash clear로 지워주시는 것이 좋습니다. 아니면 계속 stash list가 쌓이기 때문이죠.
위 명령어들만으로도 stash를 충분히 이용할 수 있지만 보다 편하게 작업을 관리하기 위해서 알아두면 좋은 코드들을 아래 정리해보겠습니다.
$ git stash pop
// 가장 최근 stash를 적용하고 동시에 stack에서 지워줌 (apply + drop)
$ git stash pop stash@{1}
// 특정 stash를 적용하고 동시에 stack에서 지워줌 (apply + drop _ stack명은 stack list 참고)
$ git stash save stash이름
// stash를 원하는 이름으로 정하기
stash가 많아지다 보면 뭐가 뭔지 알아볼 수 없어집니다. 작업에 여념이 없으면 stash를 지우지 않고 쌓아두는 경우도 왕왕 있을것 같습니다.
하지만 stash list는 위와 같이 바로 전 commit 메시지와 index만 이렇게 보일뿐인데요, 이렇게 쌓여가는 stack들중 특정 stack을 구분하기 위해서 stash이름을 따로 저장하는 것도 작업의 효율을 높힐 수 있을것 같습니다.