git pull origin master 또는 git checkout master 와 같이 브랜치를 변경하거나, 원격저장소에서 pull을 받을때 아래와 같은 오류가 나온적 경험이 한번쯤은 있을것 입니다.
1 2 3 4
error: Your local changes to the following files would be overwritten by checkout: themes/icarus/layout/widget/recent_posts.ejs Please commit your changes or stash them before you switch branches. Aborting
error: Your local changes to the following files would be overwritten by merge:
error: Your local changes to the following files would be overwritten by checkout:
위와 같은 오류와 함께 pull이나 checkout이 동작하지 않습니다.
처음 Git을 사용하였을때는 집과 회사를 오가면서 깃허브를 이용해서 push도 하고 pull도 하고 잘 사용하다가
이런 오류가 나오면 어떻게 해야할지 모르겠고, 커밋을 해야하는것 같은데
무의미한 커밋을 하고 싶지는 않아서 다른 폴더로 clone을 하고 다시 작업을 했었는데요.
해결 방법
에러 메세지를 자세히 보면 해결 방법이 나와있습니다.
Please commit your changes or stash them before you merge. 그리고
Please commit your changes or stash them before you switch branches. 라는 문구가 있습니다.
메세지 그대로 merge 또는 switch branch 이전에 변경사항을 commit 하거나 stash 하라고 합니다.
위에서도 말했지만 저는 쓸데 없는 커밋을 하고싶지 않아 방법을 모르고 새 프로젝트를 실행했지만
이때는 git stash 명령어를 사용하면 됩니다.
stash는 간단하게 버전관리 되는 대상들을 잠시동안 임시저장 해두는 방법이라고 말할 수 있습니다.
그래서 어떻게 하라는건가요?
위와 같은 상황에서는 아래와 같이 사용하면 됩니다.
1 2 3 4 5 6
# 현재 Staging 영역에 있는 파일의 변경사항을 스택에 넣어둡니다. $ git stash # 아래 명령어와 같이 원격 저장소의 master에서 pull을 하거나, git checkout master와 같이 브랜치를 바꿀 수 있습니다. $ git pull origin master # stash 명령어로 스택에 넣어둔 변경 사항을 적용하고, 스택에서 제거하여줍니다. $ git stash pop
간단하게 한줄로 표현하면 git stash && git pull origin master && git stash pop 와 같이 사용할 수 있습니다.