[GIT] 깃(Git) 스태시(stash) 사용하기 - 변경된 내용 임시 저장하기
git stash
git stash는 무엇일까?
git stash는 파일의 변경 내용을 일시적으로 기록해두는 영역이라고 생각하면 된다.
실제로 현업에서 git을 사용하다 보면 생각보다 많이 사용하게 되는 게 git stash라고 한다.
예를 들어 아직 commit 하기 이전에 작업을 진행 중이었는데,
정말 급한 일들 현재 내가 하고 있는 업무보다 우선순위가 높은 새로운 업무를 받거나, 버그를 당장 고쳐야 한다거나 할 때 지금 하고 있는 작업을 commit 하기 애매하다면 git stash를 사용해 현재 변경했던 모든 내용들을 일시적으로 저장할 수 있다.
그리고 우선순위가 높은 작업들을 전부 처리한 뒤 git stash로 임시 저장한 내용들을 다시 불러와 작업을 이어서 할 수 있다.
스태시 저장하기
현재 git status를 통해 확인되는 현재 변경된 내용들을 스태시를 이용해서 저장을 할 것이다.
# git stash push -m "<message>"
$ git stash push -m "message"
# git stash save "<message>"
$ git stash save "message"
# save 생략
$ git stash
이런 식으로 메시지와 함께 저장할 수 있고, 메시지를 생략하고 바로 저장할 수도 있다.
자 여기서 핵심은 위에서 설명한 것처럼 "변경 내용"을 임시저장 한다는 점이다.
그렇기 때문에 저렇게 새롭게 추가된 파일의 경우 stash를 통해 저장되지 않는다.
(* 여기서 또 재미난 점은 만약 저 새롭게 추가된 파일이 staged area에 add를 통해 들어가 있다면 stash를 통해 저장된다는 점이다.)
스태시 목록 조회하기
스태시를 통해 저장된 목록들을 조회할 수 있다.
$ git stash list
여기서 신기한점이 하나 있는데, 그냥 stash로 저장한 목록과, message와 함께 저장한 목록이 표시되는 게 조금 다르다.
그리고 보통 stash를 stack이라고 불리 경우가 많은데, 이는 목록을 보면 알겠지만 최근에 저장된게 위로 쌓이며 나중에 스태시를 불러올 때 따로 지정해주지 않는 이상 위에서부터 하나씩 뽑혀오기 때문이다.
스태시 저장된 내용 확인하기
스태시 목록이 다양할 때나, 다른 작업을 열심히 하고 다시 작업을 이어서 하려고 할 때 어느 스태시에 저장해 놨는지 까먹을 수 있다. 당연하게도.
그럴 경우 하나씩 스태시를 가져올 필요 없이 그냥 이 스태시에 무슨 작업이 들어가 있는지 확인할 수 있는 명령어가 있다.
# git stash show [stash@{index}] [-p]
$ git stash show
$ git stash show -p
$ git stash show stash@{2}
$ git stash show stash@{2} -p
git stash show를 입력한다면 간단하게 어떤 파일들이 들어있는지 확인할 수 있고, -p옵션을 사용한다면 좀 더 상세한 내용들을 확인할 수 있다.
스태시 가져오기/불러오기
자 이제 스태시에 저장했던 것을 불러올 것이다.
불러오는 방법에는 두가지 방법이 존재한다.
# git stash pop [stash@{index}]
$ git stash pop
$ git stash pop stash@{2}
# git stash apply [stash@{index}]
$ git stash apply
$ git stash apply stash@{2}
git stash pop은 pop이라는 명령어로부터 이미 느낀 것처럼 목록에서 추출해낸다고 생각하면 된다.
git stash pop 명령어와 함께 목록에서 사라진다.
git stash apply는 pop과는 다르게 목록에서 사라지지 않고 해당 stash를 불러온다.
여기서 둘다 공통적으로 stash#{index}를 사용하는데, 이는 위에서 설명한 것처럼 특정 stash를 지정해주지 않는다면 최근에 저장된 stash를 불러오기 때문이다.
그리고 추가적으로 --index라는 옵션이 존재하는데,
기본 명령어로는 staged area에 올라간 파일의 상태를 불러오지 않는다.
즉, 이 파일이 staged area에 있는지 아닌지까지의 상태를 불러오기 위해서는--index 옵션을 사용해야 한다.
(* 여기서 또 재미난 점은 새롭게 추가된 파일의 경우 staged area의 상태가 그대로 저장된 상태로 --index 옵션 없이 불러와진다는 점이다. )
# git stash pop/apply --index
$ git stash pop --index
$ git stash apply --index
말로만 하는 것으론 이해가 안 된다면, 실제로 명령어를 실행해보면서 테스트하는 것을 추천한다.
스태시 제거하기
git stash pop을 사용했다면 상관없겠지만, git stash apply를 통해 안전하게 가져왔다면 git stash list 에는 불필요한 목록들이 존재할 것이다.그때 이 삭제하기 명령어를 통해 삭제가 가능하다.
# git stash drop [stash@{index}]
$ git stash drop
$ git stash drop stash@{2}
# git stash clear
$ git stash clear
git stash drop은 stash@{index}가 생략될 경우 최근의 stash만 삭제되며, 따로 stash index를 지정하면 지정한 것만 따로 제거할 수 있다.
git stash clear는 말 그대로 목록을 전부 삭제한다.
참고: https://backlog.com/git-tutorial/kr/reference/stash.html
참고: https://git-scm.com/docs/git-stash
참고: https://www.atlassian.com/git/tutorials/saving-changes/git-stash