프로그래밍/git

[git] git stash에 대해서 알아보자

사바라다 2021. 4. 13. 23:45

안녕하세요. 오늘은 git stash 명령어에 대해서 알아보는 시간을 가져보도록 하겠습니다.

git stash 명령어는 언제 사용하는가 ?

stash 저장소는 임시저장소입니다. 프로젝트에서 작업을 하고 있었습니다. 그런데 다른 요청이 들어와서 다른 일을 먼저 진행하게 되었습니다. 해당 요청을 처리하기 위해서는 branch의 전환이 필요합니다. 하지만 branch를 전환하기 위해서는 Index Storage의 데이터를 비워야합니다. 그러기 위해 commit을 이용할 수 있습니다. 하지만 commit은 커밋 로그가 남으며 원하는 목적과 동떨어집니다. 이럴때 임시 저장소로 사용할 수 있는것이 바로 stash 명령어이며 이 명령어는 stash Area를 사용합니다.

git repository의 종류

[git] git을 이용한 버전관리 - 기본편(add, commit, status, log, reset) 에서 우리는 처음에 git에서 사용하는 저장소에 대해서 알아보았었습니다. 대표적으로 Work-Tree, Index, Repository가 있었는데요. 사실 여기에 하나의 저장소가 더 있는데요. 바로 stash 입니다. stash 영역은 스택 자료구조료 되어있습니다.

명령어를 통한 기본적인 flow

그렇다면 git 명령어를 통해 실제로 어떻게 동작하는지 확인해보도록 하겠습니다.

먼저 file을 추가한 후 add 명령어를 이용하게 되면 해당 파일은 index area에 들어가며 tracked 상태가 됩니다. 아래 처럼 status 명령어를 통해 확인이 가능합니다.

해당 프로젝트에 다른 급한 용무가 생겼습니다. 이럴경우 우리는 branch를 이동하여 작업을 진행하여야합니다. 하지만 변경하려고 하지만 변경하는 명령어인 checkout을 사용하면 브랜치를 전환하기 전에 변경 사항을 커밋하거나 스태시하십시오. 중지함 라는 알림을 보는 경우가 있습니다. 이것은 현재 브런치에서 checkout 할 때 index 영역의 변경된 내용을 함께 데리고 변경되기때문에 충돌이 일어난 경우입니다. 때문에 index 영역을 깨끗하게 해 줄 필요가 있습니다. 이런 역할을하는 stash 명령어를 아래와 같이 사용합니다.

다시 status 명령어를 통해 Index 영역이 어떻게 되어있는지 확인해보도록 하겠습니다. 깨끗해진걸 아래와 같이 확인할 수 있습니다.

갑작스럽게 들어온 작업이 끝나고 다시 원래 진행하고 있던 작업으로 돌아가도록 하겠습니다. 이 작업은 stash apply라는 명령어를 사용하면 가능합니다.

추가적인 명령어

기본적인 플로우를 경험해 봤으니 이제 알아두면 좋을 명령어들을 알아보도록 하겠습니다.

stash 영역은 stack 자료구저의 형태로 나타납니다. 즉, 새로 들어간 stash가 가장 위쪽인 0번을 부여받고 이전에 들어가 있던 stash는 이후 순번을 부여받게 됩니다. 그래서 stash apply를 하게 되면 가장 위에있는 stash로 복구합니다. apply를 한다고 해서 바로 stash가 삭제되지 않습니다. 그 list를 볼 수 있는 명령어가 stash list 인데요. 해당 명령어를 이용하면 아래처럼 확인할 수 있습니다.

그리고 apply를 한다고 해서 stash가 삭제되지 않고 계속 쌓입니다. 필요없는 stash를 제거하기 위해서는 별도의 명령어가 필요한데요. 바로 drop 명령어입니다. 아래처럼 stash@{번호}를 통해 더 이상 사용하지 않는 stash를 삭제할 수 있습니다.

apply와 drop을 동시에 해주는 명령어가 있습니다. 바로 pop 명령어입니다. 해당 명령어를 사용하면 stash에서 정보를 가져온 후 바로 해당 stash를 삭제합니다.

마무리

오늘은 이렇게 git의 stash에 대해서 알아보는 시간을 가져보았습니다.

요즘 이런 저런 준비해야할 부분이 많아 블로그에 뜸 했던것 같습니다.

모든 일을 전부 마무리했으니 다시 초심의 마음으로 꾸준히 블로그에 임하도록하겠습니다.

감사합니다.

참조

git-scm_Git 도구 - Stashing과 Cleaning

medium_demystifying-git-stash-basic-workflow-in-the-four-areas