Log Stash

as an Industrial Personnel

Note

TIL: git rebase의 --autostash옵션은 자동으로 stash를 해준다

SavvyTuna 2017. 5. 21. 13:32

사실 예전부터 알고 있던거긴 하지만...

feature브랜치 위에서 작업하다보면 팀원 전체가 공유하는 공통 브랜치(develop)의 내용이 바뀌어서 커밋 내용을 따라 잡아야 할 일이 빈번하게 생긴다. 이 때 나는 머지 커밋이 생기는게 보기 싫어서 merge 대신에 rebase를 사용하는데, merge는 충돌만 없으면 별 말 없는 반면에 rebase는 마지막 커밋 이후에 커밋하지 않은 작업물이 남아 있으면 걔네들 때문에 리베이스 못 하겠으니 먼저 커밋하거나 stash해서 치워두라고 말하고 종료한다.

그래서 지금까지는

git stash
git rebase develop
git stash pop

이렇게 rebase 전후로 stash push, pop을 해 가면서 썼었다.

이게 또 문제가 있는게 stash pop하는걸 까먹을때가 은근 많은데, 까먹은 상태에서 유니티에서 바뀐 소스 파일을 다시 읽어들이기라도 하면 각종 .meta, .mat 파일들이 다시 생성되면서 stash apply가 쉽게 안 되는 상태가 되어버린다. 그리고 기다리는게 귀찮기도 하고. 게임 프로젝트다보니 바이너리가 많아 stash하는데만 수 초가 소요되는데 그걸 기다렸다가 rebase 명령 치는게 정말 귀찮다.

--autostash 옵션을 붙이면 저 세 명령을 자동으로 해준다. 혹여나 rebase 다 하고 충돌 때문에 stash를 적용할 수 없는 상황이라면 stash가 어디 있고, 충돌을 해결하고 나면 어떻게 적용할 수 있는지도 알려준다.

그렇게 또 한동안 rebase할 때 마다

git rebase --autostash develop

처럼 --autostash옵션을 매번 반복해서 넣어줬는데, 계속 하다보니 이것도 이젠 귀찮아졌다. 그래서

git config --global rebase.autostash true

이렇게 config를 수정해서 옵션을 붙이지 않아도 자동으로 자동 스태쉬 옵션이 켜지게 해줬다. 전역적으로 스위치를 켜놓기 싫다면 그냥 저장소에 있는 gitconfig 파일에 명시해도 상관없고.

덤으로, 이렇게 하면 git pull -r할때도 자동 스태쉬가 적용된다.