슬기로운 개발생활

[Git] Git 버전관리 - stash

by coco3o
반응형

Git stash란?

마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어

 

stash 저장소는 임시저장소이다. 만약 어떤 작업을 하던 중에 다른 요청이 들어와 하던 작업을 멈추고 잠시 브랜치를 변경해야할 일이 있을때 아직 작업을 완료하지 않은 일을 commit하는 것은 껄끄러울 것이다. 이 때 stash 명령어를 사용한다.

 

출처 : https://sabarada.tistory.com/156?category=792135

 

명령어를 통한 기본적인 flow

먼저 file(stashTest.txt)을 추가한 후 add 명령어를 이용해 해당 파일을 index area에 넣으면 tracked 상태가 된다.

여기서 다른 급한 용무가 생겼을 때 우리는 작업하던 내용을 commit하지 않고 branch를 이동하여 작업을 진행하여야 한다. 하지만 checkout 명령어를 사용하여 branch를 변경한다면 아래와 같이 file(stashTest.txt)이 다른 branch에 딸려오게될 것이다. 그렇다고 master branch에 있던 내용을 지워버릴 수도 없다.

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

 

다시, branch를 master로 옮기고 git stash 명령어를 사용해보자.

이후, git status를 찍어 보면 전과 다르게 깨끗해진걸 확인할 수 있다.

그리고 stash에 무엇이 저장되어있는지 확인하기 위해 git stash list 명령어를 입력해보자.

위와 같이 데이터를 저장하고 있다.

여기서 다시 checkout을 하여 branch를 변경하면 file이 다른 branch에 딸려오지 않음을 알 수 있다.

이제, 다른 급한 용무가 끝났다고 하고, 다시 돌아와 저장된 데이터를 불러와보자. git stash apply 명령어를 입력한다.

git stash apply 명령어로 저장된 데이터를 불러왔다.

하지만, 아래와 같이 stash에서 저장된 데이터를 꺼냈음에도 stash에 데이터가 보존되어 있는 것을 알 수 있다.

git stash apply 명령어로는 기존 데이터가 삭제되지 않고 계속 쌓인다. 필요없는 stash를 제거하기 위해서는 별도의 명령어가 필요한데, 바로 drop 명령어이다. 


더 알아가기

 

stash 영역은 stack 자료구조의 형태로 나타난다. 즉, 새로 들어간 stash가 가장 위쪽인 0번을 부여받고 이전에 들어가 있던 stash는 이후 순번을 부여받게 된다. 그래서 stash apply를 하게 되면 가장 위에있는 stash를 복구시킨다.

만약 여러 개의 stash가 있고 선택적으로 stash를 제거하고 싶다면 git stash drop stash@{번호} 를 통해 원하는 stash를 삭제할 수 있다.

 

stash 영역은 stack 구조의 형태이기에 apply와 drop을 동시에 해주는 pop 명령어를 사용할 수 있다.

해당 명령어를 사용하면 stash에서 정보를 가져온 후 바로 해당 stash를 삭제한다.

 

 

reference : https://sabarada.tistory.com/156?category=792135

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기