안녕하세요. 이번 시간에는 git stash에 대해 간단하게 알아보겠습니다.

 


 git stash는 변경 사항을 어딘가에 저장할 수 있는 명령어입니다. 더 정확하게 말하면, 현재 working directory의 상태를 어딘가에 저장하고 싶어요. 그리고 변경 상태를 clean하게 만들고 싶어요. 이럴 때 쓰일 법 합니다. 쉽게 말하면, 내 작업 디렉토리의 변경 사항을 임시로 어딘가에 저장하고, 나중에 꺼내올 때 쓰입니다. 상황으로 설명해 보겠습니다.

 

 

 제 test 브랜치에는 1.txt와 2.txt가 있습니다. 이 1.txt에서 8, 9라는 것을 추가했습니다.

 

 그러고 나서, git stash를 입력해 봅시다. 그러면, 8과 9가 추가된 상태는 어딘가에 저장되게 됩니다. 그리고 1.txt는 아래와 같이 변하게 됩니다.

 

 1.txt에 8, 9가 추가되지 않았습니다? 이게 무슨 일일까요? 변경 상태를 clean하게 만들었다는 의미입니다. 어? 그러면 1.txt에 8과 9가 추가되었다는 정보는 사라졌을까요? git이 그렇게 바보같이 설계되지는 않았을 겁니다.

 

 


 git stash list는 스태시 목록들을 보여줍니다. 제가 방금 stash한 것이 보이는데요. stash@{0}에 있는 이 0을 주목해 보겠습니다. 우리는, 이 stash 0에서 어떠한 것이 변경되었는지를 보고 싶습니다.

 

 

 git stash show -p 0은 0번 stash에서 어떠한 것들이 변경되었는지를 보여줍니다. 보면, 8과 9가 1.txt에 추가되었음을 볼 수 있어요.

 


 이제 2.txt에 있는 2를 삭제하고, 3, 4, 5를 추가합니다. 그리고 다시, git stash를 해 봅시다. 그러면, 2.txt에는 1, 2가 있습니다. 그러면, 2를 삭제하고, 3, 4, 5가 추가되었다는 변경 정보는 어딘가에 들어가 있을 겁니다.

 

 볼까요? stash@{0}하고 stash@{1} 이렇게 2개가 생성되었음을 볼 수 있습니다. 0번 스태시부터 봅시다.

 

 

 보면, 2.txt에 2가 빠지고 3, 4, 5가 추가되었다는 변경 사항이 들어가 있어요. 이것이 제가 최근에 한 stash입니다.

 

 

 다음에, 1번 스태시는 1.txt에 8과 9가 추가된 변경사항입니다. 이건 먼저 한 stash였습니다. 먼저 한 것이 뒤에 있는 상황인가요? 마치 스택이라는 자료구조와 유사한 상황입니다.

 


 이제 우리는 특정 stash의 변경 사항을 다시 로컬에 반영시키고 싶습니다.

 

 1번 스태시의 변경 내용을 apply 해 보겠습니다. 그럴려면, git stash apply 1을 입력하시면 됩니다.

 

 

 로컬을 보면, 1.txt에 8, 9가 추가되었다는 변경 사항이 그대로 적용되었음을 볼 수 있습니다.