개발 이야기/Git

[GIT] git stash란?

제이온 (Jayon) 2020. 11. 29.

 

 

안녕하세요? 코딩중독입니다.

 

저번 시간에는 브랜치를 병합하는 방법에 대해서 알아 보았습니다.

 

이번 포스팅에서는 stash에 대해 설명하겠습니다.

 

 

stash란?

 

 

네이버 영어 사전 기준으로 stash는 안전한 곳에 넣어 둔다는 의미입니다.

 

git에서의 stash도 위 정의와 별반 다르지 않습니다. 그리고 이것을 언제 사용하는 지는 아래 실습을 통해 알려드리겠습니다.

 

 

먼저, 이전까지 수행한 프로젝트 폴더를 싹 지우시거나 새로 만들어 보겠습니다.

 

저는 gitProject3 폴더를 새로 만들어서 진행해 보겠습니다.

 

그리고 master 브랜치에서 test.txt를 만들고, 내용은 a로 해 주신 다음 add와 commit을 하겠습니다. 이때, commit 메시지는 상관없으나, 저는 "ver.1"로 하겠습니다.

 

이후, git checkout -b exp 명령어를 사용하여 exp 브랜치를 생성과 동시에 사용할 브랜치를 exp로 이동하겠습니다.

 

원래는 git branch exp를 한 다음에 git checkout exp를 수행하였지만, 위의 명령어를 통해 한 줄로 줄일 수 있습니다.

 

그 다음 test_2.txt를 만들고, 내용은 b로 해 주신 다음 git add를 해 주시면 됩니다. commit은 하지 말아주세요!!

 

 

 

 

여기까지 잘 하셨다면, git status를 찍어 봅시다. 위와 같이 test_2.txt가 추적된 파일이라고 뜨면 잘 하신 겁니다.

 

 

이제, 한 가지 가정을 해 봅시다. 제가 exp 브랜치에서 여러 가지 작업을 하고 있었는데, 급하게 master 브랜치로 이동할 일이 생겼다고 합시다.

 

그러면, 우리는 하던 내용을 commit하지 않고 git checkout master를 하게 될 것입니다.

 

한 번 master 브랜치로 이동한 후 git status를 입력해 봅시다.

 

 

 

 

master 브랜치는 원래는 test.txt만 존재하는 상태였는데, git status를 찍어보니까 exp 브랜치에 있던 내용이 딸려왔습니다. 하지만, 그렇다고 exp 브랜치에 있던 내용을 지워버릴 수도 없습니다.

 

이럴 때 사용하는 것이 stash 명령어입니다. stash를 사용하여 특정 브랜치에서 작업하던 내용을 저장해 두는 것이죠.

 

 

git stash

다시, 브랜치를 exp로 옮겨 봅시다. 그리고 git stash 명령어를 입력합니다.

 

 

 

 

위와 같이 무언가 저장되었다는 메시지가 뜹니다. 이후, git status를 찍어 보니 전과 다르게 추적할 파일이 없다는 것을 알 수 있습니다.

 

그리고 status에 무엇이 저장되어있는지 확인하기 위하여 git stash list를 입력해 봅시다.

 

 

 

 

다음과 같이 특정 데이터를 저장하고 있습니다.

 

이제, 저장된 데이터를 불러와 봅시다. git stash apply 라고 입력합니다.

 

 

 

 

다음과 같이, test_2.txt 파일이 새로 생겼음을 알 수 있습니다. 그렇다면, 저장된 데이터를 꺼내 왔으니 이전에 있던 데이터는 없어진 것일까요?

 

다시 git stash list를 입력해 봅니다.

 

 

 

 

다음과 같이 git stash apply 명령어로는 기존 데이터가 삭제되지 않고 보존되어 있습니다.

 

이것을 없애기 위해서는 git stash drop 명령어를 사용하면 됩니다.

 

 

 

 

위와 같이 stash list에는 더 이상 어떠한 데이터도 남아 있지 않다는 것을 아실 수 있습니다.

 

 

이제는 stash list에 어떻게 데이터가 쌓이는지 확인해 봅시다.

 

먼저, git stash를 입력하여 현재 데이터를 저장합니다. 그리고 test_3.txt를 만들어서 내용은 c로 해 주시고 git add test_3.txt를 수행합니다.

 

 

 

 

다음과 같이 2개의 요소가 저장되어있습니다. 그렇다면, stash[0]에는 test_2.txt에 관한 내용이 있는지, test_3.txt에 관한 내용이 있는지 아직은 잘 모릅니다.

 

한 번 꺼내 봅시다. git stash pop이라고 입력합니다.

 

 

 

 

pop이라는 명령어를 통해 눈치채신 분도 있을 것입니다. 네, 맞습니다. stash는 스택 방식으로 작동합니다.

 

나중에 들어온 것이 먼저 나가는 방식이죠.

 

 

마지막으로, stash를 사용하실 때 주의할 점이 있습니다.

 

일단, 위 상태에서 test_4.txt를 하나 더 만들고 내용은 d로 한 다음 add를 하지 않겠습니다.

 

그리고 이 상태에서 git stash를 합니다.

 

 

 

 

다음과 같이 test_3.txt는 저장이 되었지만, test_4.txt는 저장이 되지 않은 것을 알 수 있습니다.

 

이를 통해 stash는 적어도 버전 관리가 되고 있는 파일에 대해서는 저장해 준다고 결론지을 수 있습니다.

 

 

정리

지금까지 브랜치 내에서 데이터를 저장해 주는 stash를 배웠습니다.

 

이것은 아직 중요한 것은 아니지만, 나중에 브랜치를 다루는 범위가 넓어지면 유용하게 쓸 날이 올 것입니다.

 

글은 여기까지 쓰고, 다음 포스팅에서 뵙겠습니다.

 

 

참고 사이트

opentutorials.org/course/2708

 

지옥에서 온 Git (새 수업으로 대체) - 생활코딩

이 수업은 GITn 시리즈로 완전히 대체 되었습니다. GITn은 보다 많은 내용을 작은 단위로 쪼개서 선택적으로 공부하실 수 있도록 제작된 수업입니다. 아래 주소를 통해서 GITn 을 접할 수 있습니다.

opentutorials.org

 

 

 

 

댓글

추천 글