TIL

유용한 Git 명령어 - stash

sincerely10 2020. 9. 6. 20:14
반응형

이번 포스트는 git 명령어 중 하나인 stash에 대해 다뤄 보겠습니다. 저의 경우에 단순 빈도만 놓고 본다면 가장 많이 그리고 유용하게 사용하는 것 같습니다. 적어도 제 Local 환경에서 말이죠.

1. git stash 살펴보기

사실 stash를 사용만 했지 정확히 어떤 단어인지는 모르고 있었습니다. 사전적 의미는 다음과 같습니다.(google 검색)

사전적 의미로는 '어떤 것을 안전하고 비밀스럽게 특정 장소에 숨기다.' 라는 뜻을 가지고 있습니다. stash 명령어도 실제로 특정장소인 로컬(Local) 환경에 잘 보관하는 역할을 합니다. 비밀스럽게(?)는 잘 모르겠네요. 어쨌든 remote 환경에 있지는 않으니까요!

사용의 목적을 정말 간단하게 소개하자면, 로컬에서의 임시저장과 동일한 역할을 합니다. 한 가지 상황을 소개해보겠습니다.

- 특정 branch로 작업중인데, 제가 작업하지 않은 branch에 대해 다른 개발자가 master에 push를 했습니다.
- 제 branch에 영향을 줄 작업이기 때문에 해당 branch를 rebase 할 필요성이 생겼습니다.
- 해당 branch를 commit을 하고 master branch로 이동해서 pull을 받고,
다시 작업하던 branch로 와서 'rebase -i master' 로 master의 내용을 rebase 하고 
branch 작업이 완료된 후 'rebase -i HEAD~2' 명령어로 push 작업까지 마무리를 지울 수 있습니다.
- 그러나 branch의 작업이 덜 완성 되었고 두 번의 rebase를 하기가 약간 번거롭게 느껴집니다.

이런 경우에 위에서 설명한 대로 자신의 branch를 commit 해두고, master로 브랜치 이동을 해서 pull 받고 -> 다시 브랜치로 이동해 rebase를 진행할 수 있습니다.

그렇지만 commit 할 내용이 덜 완성 되었거나, 커밋 메세지 조차 생각이 안 나는 경우가 있을 수도 있습니다.
이럴 때, 자신의 브랜치에서 git stash 명령어를 사용할 수 있습니다.

책갈피, 임시저장소 등과 같이 제 Local에서 지우지만 않는다면 얼마든지 다시 불러와 사용할 수 있습니다.

2. git stash 실전 적용

1에서 언급한 상황에 대한 실제 적용 예시를 보여드리겠습니다.

2.1 현재 Local master branch에서 branch를 생성하고 수정 발생

위의 내역과 같이 현재 master에서 branch 생성 하였습니다.

그리고 아래 사진과 같이 수정을 발생시켰습니다.

 

2.2 master branch로의 이동을 위한 임시저장 stash 활용

이 상황에서 master branch에 새로 변경 되었다는 것을 확인하였습니다. 제 Local은 아직 master branch가 최신화가 되어 있지 않았고 이 master의 내용이 제 작업환경에 영향을 미친다면 효율적인 작업을 위해서는 이 내용을 받아와야 할 것입니다.

바로 이 상황에서 git stash를 적용합니다. 명령어도 간단합니다. git stash 만 입력하면 끝입니다.

git stash를 입력하니 변경내역이 사라졌습니다. 제 변경내역은 안전하게 있는건지 확인 해보겠습니다.

stash 목록을 보기 위해서는 git stash list를 입력해줍니다.

변경내역이 날아간게 아니라 제 local 환경에 잘 저장되고 있는 것을 확인했습니다.

2.3 master branch 이동 및 pull origin master

이제 master branch로 checkout으로 이동 및 pull을 받아 보겠습니다. 갑자기 8월 30일에서 9월 6일로 일주일이나 날짜가 점프 해버렸는데, 사실 백업용으로 확인을 위해 잠시 방치 해둔 Directory인지라 그 8월 30일에서 멈춘 로컬 커밋이 9월 6일까지로 이동했습니다..

이제 다시 작업하던 브랜치로 돌아가 master의 내용을 rebase 해줘야 합니다.

2.4 작업중인 branch로 이동해 master rebase

브랜치로 이동 -> git rebase -i master로 local master 내용을 받아옵니다.

 

git rebase를 하고 난 후의 git log의 상황입니다.

 

2.5 stash 내용 적용하기

마지막 과정이 남았습니다. 조금 전 master branch 이동 전, stash 해두었던 변경 내역을 해당 branch에 적용시켜야 합니다. 마찬가지로 stash list가 어떻게 있고 어떤 것을 적용해줄지 확인합니다.

동일하게 stash 내역이 잘 있습니다. 어떤 branch 상황에서 stash 했는지 상세하게 나오기 때문에 이를 잘 활용하면 더욱 좋습니다.

이제 stash list에서 제가 적용하려는 list를 가져오는 일만 남았습니다.

stash 내역을 가져오기 위해서는 git stash apply 'stash의 이름'을 입력해줍니다.
아래 실제 명령어 입력을 보겠습니다.

 

드디어 stash에 넣어두었던 내역이 정상 적용되었습니다. 이 과정으로 저는 한 번의 commit을 줄일 수 있게 되었습니다. rebase를 한다고 해도 불필요한 commit은 하지 않는게 좋으므로 stash의 사용을 권장 드립니다!

만약 stash를 더 이상 사용하지 않는다면(대부분 한 번 적용하고 나면 사용할 일이 없어집니다. 다른 브랜치를 옮기기 위해서는 stash를 다시 사용하게 되기 때문입니다.),
git stash drop 'stash 이름' 으로 제거가 가능합니다.

여기까지가 git stash의 활용이었습니다. stash는 말씀드린 것과 같이 잘 활용하면 정말 편하게 git 관련 작업들을 하실 수 있습니다.

감사합니다!

반응형