본문 바로가기

Git

[Git] 작업 내용 임시 저장하기 - stash

반응형

마스터 브랜치에서 작업을 하다가 아직 커밋을 하지 않았는데 급하게 다른 브랜치로 가야할 일이 생길 수 있습니다. 물론 커밋을 하고 가면 되겠지만 작업이 끝나지도 않았는데 커밋을 하면 쓸모없겠죠? ' git stash ' 를 입력하면 최신 커밋 이후의 작업들을 저장할 수 있습니다. 마스터 브랜치에서 미완성된 팩토리얼 함수를 커밋하지 않고 highlevel 브랜치로 이동해보겠습니다.

 

 

저는 커밋을 하고 싶지 않은데 checkout 전에 커밋을 하라는 오류가 뜨네요? git stash 명령어를 입력하고 다시 이동해보겠습니다.

 

 

잘 되네요. highlevel 브랜치에서 작업이 다 끝나고 다시 마스터 브랜치로 돌아갔다고 가정하겠습니다. stash에 저장된 작업물을 다시 불러오려면 ' git stash apply ' 명령어를 입력하면 됩니다. 명령어를 입력하고 다시 워킹디렉터리를 살펴보겠습니다.

 

 

작업중이던 팩토리얼 함수가 잘 돌아왔네요! 팩토리얼 함수를 완성하고 커밋을 하면 기분이 정말 좋을 것 같습니다.

stash에 대해 조금 더 자세히 알아보겠습니다. stash는 임시 저장공간이며 스택 구조를 이루고 있습니다. 스택 구조이기 때문에 가장 먼저 들어간 작업물이 가장 나중에 나옵니다.

stash는 브랜치를 이동한다고해서 바뀌지 않습니다. 즉, master 브랜치에서 작업하던 내용을 stash에 저장하고 이를 highlevel 브랜치에서 꺼내 쓸 수 있다는 말입니다. 만약에 master 브랜치에서의 작업을 highlevel 브랜치에서 잘못 하고 있었다면 이를 stash에 보관한 뒤에 master 브랜치에서 꺼내 쓰면 굉장히 편하겠죠?

그런데 apply 명령어로는 스택의 최상단의 작업물만 불러올 수 있습니다. 스택에서 두 번째 층에 있는 작업물을 쓰고 싶다면 어떻게 할까요? 먼저 stash에 들어있는 모든 작업물들을 확인해보겠습니다. ' git stash list ' 명령어를 입력하면 됩니다.

 

왼쪽에 stash@{n}이 스택에서 인덱스 번호라고 생각하시면 됩니다. 특정 작업물을 불러오고싶다면 아래와 같은 명령어를 입력하면 됩니다. n은 지우고자 하는 인덱스 번호입니다.

$ git stash apply stash@{n}

그런데 위 사진에서 중복된 내용이 저장되어 좀 지저분하네요. 내용물을 지우겠습니다. 명령어는 아래와 같습니다.

$ git stash drop stash@{n}

apply를 해준 작업물은 drop을 통해 지워주는게 좋겠죠? 그런데 꽤나 번거롭습니다. apply와 drop을 동시해 해주는 명령어가 있습니다. 바로 pop입니다.

$ git stash pop stash@{n}

만약에 stash 아이디를 적지 않고 git stash pop까지만 적으면 가장 최상단의 작업물이 pop됩니다.

반응형

'Git' 카테고리의 다른 글

[Git] 명령어 정리  (0) 2022.01.14
[Git] remote repository에 올라간 커밋 취소하기  (0) 2022.01.14
[Git] 누가 기록했는지 확인하기  (0) 2022.01.14
[Git] git pull시 주의점  (0) 2022.01.14
[Git] merge 완전정복  (0) 2022.01.14