git stash (feat. 내가 왜 마스터 브랜치에 있지)

yeeun lee·2020년 7월 4일
1
post-custom-banner

개인적으로 프로젝트를 하다 보면, 브랜치를 생성하지 않은 채로 (그러니까 실수로) 마스터 브랜치에서 작업을 하는 상황이 생긴다.

예를 들어서 어떤 브랜치에서 작업을 끝낸 뒤 merge하고, 어제 했던 작업에서 뭔가 이어지는 작업을 할 때.

merge했던 것을 깜빡하거나 내가 branch에 있다고 착각하고 한참을 마스터에서 작업한 적이 종종 있다... 😟 내가 어느 브랜치에 있는지 습관적으로 확인해야 하는데!

그상태에서 master를 commit하고 branch를 생성해서 작업하게 되면, local master branch의 상태가 요상해질 수 있다. 이 때 쓰는 것이 git stash다.

git stash

하고 있던 작업을 잠시 담아두는 역할을 한다. 내 branch에서 바뀐 내용들을 commit하는 것이 아니라 내가 다른 브랜치로 이동하더라도, 다시 꺼내올 수 있도록 임시로 저장해주는 것이다.

다만 git stash를 쓰게 되면 변경 내용이 저장되면서, 동시에 가장 이전의 commit을 했던 상태로 현재의 브랜치가 돌아오게 된다.

내 상황을 예로 들면 master에서 git pull origin master를 하고 한참 작업을 하다가 master인 것을 깨달았을 때, git stash를 하면서 내 작업 내용이 저장됨과 동시에 master branch는 내가 remote에서 pull했던 그 시점의 코드로 돌아가게 된다.

git stash list

내가 git stash 명령어로 저장한 목록들을 볼 수 있다. stash@{숫자} 형식으로 보여지고, 0번이 최근이며 추가되면서 점점 1,2,3... 로 숫자가 뒤로 밀려나게 된다.

git stash pop

저장해놓은 stash를 꺼내오는 방식이다. python pop method처럼 요 명령어는 꺼내오면 저장한 것을 불러오면서 최근 것이 없어지게 된다.

git stash apply

stash pop과 다르게 불러와도 list에 남아있게 된다.

git stash drop

숫자를 지정해서 골라서 삭제할 수도 있고, 숫자를 지정하지 않으면 가장 최신의 stash 목록이 삭제된다.

local master branch에서 작업하다가 짜증난 적이 몇 번 있었는데,
역시 이런 문제를 해결할 수 있는 쉬운 방법이 있다는게 참 신기하당

profile
이사간 블로그: yenilee.github.io
post-custom-banner

2개의 댓글

comment-user-thumbnail
2020년 7월 8일

git flow를 사용해 branch 관리를 하는 식으로 master를 더럽히는 것을 방지할 수도 있을 것 같습니다.
그리고 약간 첨언하자면 git stash pop을 해도 conflict가 발생하는 경우에는 stash안에 내용이 남아있습니다.

답글 달기
comment-user-thumbnail
2021년 3월 31일

검색 중 feat이 눈에 확 들어와서 들어왔습니다.
제가 원하던게 맞네요

답글 달기