Stash로 변경 이력 임시 저장하기
변경 이력을 잠시 저장해야 하는 경우 💦
프로젝트에서 자신이 맡은 기능을 열심히 구현하고 있는데, 중간에 다른 브랜치를 확인해야 하는 경우가 발생할 수 있습니다. 그런데 커밋을 하지 않고 이동하게 되면, 현재 브랜치의 워킹 디렉토리에서 작업 중이던 내용들이 해당 브랜치에서도 함께 보이기 때문에 반드시 커밋을 하고 넘어가야 합니다. 하지만 커밋을 하기 애매한 경우라면 정말 곤란할 것입니다.
이때 사용할 수 있는 것이 git stash입니다. 이 명령은 stash stack이라는 공간에 현재 작업 중인 내역(WIP: Working In Progress)들을 임시적으로 저장할 수 있는 명령입니다. 스택 구조를 띄고 있기 때문에 stash 명령으로 저장한 이력의 위로 나중에 저장한 이력들이 계속해서 쌓이게 됩니다. 스택이라면 기본적으로 나중에 들어간 데이터가 먼저 나오기 때문에 stash 역시 동일하게 동작하지만, stack의 아이디를 통해 원하는 데이터만 가져와서 적용할 수도 있습니다.
stash를 사용하게 되면 하나의 파일에서 여러 코드를 시험해 보고 싶은 경우에도 손쉽게 해결할 수 있습니다.
Stash 사용하기
stash는 정말 간단하며, 다음의 명령들을 이용할 수 있습니다.
# stash stack에 현재 WIP 추가
git stash
# 메시지와 함께 추가
git stash -m "메시지"
# Staging Area는 제외하고 추가
git stash --keep-index
# Untracked 상태인 파일들도 함께 추가
git stash -u
-m 옵션을 통해 메시지를 함께 저장할 수 있는데, 아래의 나머지 두 명령에도 붙일 수 있습니다.
stash로 작업 중이던 내역들을 저장한 다음 스택의 상황을 보고 싶다면, git stash list를 실행하면 됩니다.
위 사진은 stash를 사용해 내역을 몇 가지 담아 본 예시이며, stash@{n}의 번호가 높은 데이터들이 더 이전에 저장된 것들입니다. 커밋의 내용을 자세히 보고 싶을 때 git show <hash> 명령을 사용했던 것처럼, git stash show <hash> 명령을 사용하면 해당 stash가 담고 있는 내용을 볼 수 있습니다. 내용을 좀 더 자세히 보고 싶다면 -p 옵션을 함께 사용하면 됩니다.
그리고 stash의 hash를 알고 있다면, 스택에서 hash에 해당되는 내역만 다시 반영할 수 있습니다. git stash apply <hash> 명령을 사용하면 되고, hash를 입력하지 않으면 가장 최근의 내역을 가져옵니다. 여기서 값을 가져와 반영한다 해서 해당 stash가 사라지는 것은 아니고, 실제로 위에서부터 빼오면서 반영하려면 git stash pop 명령을 사용해야 합니다. 또한 stash를 반영하여 브랜치를 새로 만들고 싶은 경우도 있을 수 있습니다. 이때는 git stash branch <branch name> 명령을 사용하면 됩니다.
마지막으로 모든 작업을 마쳤으면, git stash drop <hash>와 git stash clear 명령으로 스택을 정리하면 됩니다.
References 📝
본문의 내용은 Git 공식 문서를 참고해서 작성했습니다 ❤️