git stash가 필요한 이유
Git 폴더 내부에서 작업을 했을 때 작업물은 Unstaged Area나 Staged Area 둘 중 하나에 저장된다. 이때 만약 작업물을 커밋하지 않고 다른 브랜치로 변경할 경우 변경 사항이 같이 따라가거나 conflict가 일어나게 된다.
따라서 이러한 작업물들을 저장할 임시 공간이 필요한데, 그 공간으로 작업물을 보내주는 명령어가 바로 git stash이다.
git stash란?
git stash는 Working Directory(단 git add 자체가 안된 것은 제외, modified 것은 stash됨)와 Staging Area의 작업물을 임시 저장공간에 저장하는 명령어이다. git stash를 이용한 저장은 두가지 명령어로 할 수 있다.
git stash
git stash save
위 명령어로 stash를 해놓으면 작업물을 안전하게 저장할 수 있으며, 작업 도중 브랜치를 변경해야 할 때 매우 유용하게 사용할 수 있다. 만약 위 git stash를 하지 않으면 현재 브랜치에서 작업중인 사항이 새로운 브랜치로 따라가게 되기 때문에 브랜치를 전환할 때는 꼭 git stash를 해야 한다.
git stash pop을 이용해 저장된 코드 꺼내기
위에서 git stash로 저장된 변경 사항은 다시 git stash pop을 이용해 꺼낼 수 있다. git stash pop을 이용하면 git stash save를 이용해 임시 저장공간에 저장된 파일들이 현재 브랜치의 Working Directory와 Staging Area로 올라온다.
git stash pop
git stash apply를 사용해 저장된 코드 안전하게 꺼내기
git stash pop을 사용하면 임시 저장공간에 저장된 파일들이 지워진다. 하지만, 컨플릭이 일어날 것에 대비해서 저장된 변경 사항을 삭제하지 않고 꺼내고 싶을 수 있다. 이때 사용할 수 있는 것이 바로 git stash apply이다. git stash apply는 임시 저장공간을 그대로 둔채로 변경 사항을 꺼낸다.
git stash apply
또한 git stash apply는 stash된 변경사항을 꺼내면서 임시 저장공간을 삭제하지 않기 때문에 하나의 변경 사항을 다중 브랜치에 적용하고 싶을 때 사용된다.
여러개의 stash 한 번에 다루기
실제 사용을 될때는 git stash는 여러번 일어난다. 즉 stash를 위한 임시 저장공간은 여러개이며 변경 사항은 순서대로 쌓인다.
예를 들어 git stash를 여러번 하게 될 경우 순서대로 변경사항이 쌓이게 된다.
git stash // 변경사항1 쌓임
git stash // 변경사항2 쌓임
git stash // 변경사항3 쌓임
git stash list를 사용해 stash 목록 확인하기
git stash list를 사용하면 쌓인 stash들의 목록을 확인할 수 있다.
git stash list
git stash apply stash@{[number]} 사용해 특정 스태시 꺼내기
git stash list에서 특정 stash를 꺼내려면 apply 명령어를 사용하면 된다. stash@{[number]}은 그림1에서 확인할 수 있다.
git stash apply stash@{[number]}
git stash drop stash@{[number]} 사용해 특정 스태시 삭제하기
git stash list에서 특정 stash를 삭제하려면 drop 명령어를 사용하면 된다.
git stash drop stash@{[number]}