Programming/Git

[Git] Please commit your changes or stash them before you merge. 해결방법

Sujin Lee (Daisy) 2020. 4. 18. 02:16

프로젝트를 하면서 팀원들이 이 오류로 3번은 부른 것 같다. 

 

Your local changes to the following files would be overwritten by merge: 파일명 

Please commit your changes or stash them before you merge.

 

원인) pull 받을 파일 중, 내가 로컬에서 수정한 파일이 있기 때문이다. 

 

예를 들어 다음과 같은 상황이다. 

월요일: 10번째 커밋. 

화요일: 나는 10번째 커밋을 pull 받았다. 

수요일: 팀원A가 10번째 커밋을 pull 받고, index.html과 hello.html을 수정한 후 11번째 커밋으로 push했다.

금요일: 내가 새로 pull 받는 걸 까먹고, index.html에 무언가를 수정했다. 

          그리고 pull을 받으려고 했더니 저 오류가 떴다. 

 

이럴 경우 해결법은 간단하다. 

 

 

내 수정사항을 stash (임시공간으로 잠시 옮김) 한 다음, 원격저장소를 pull 받고 내가 stash 해놓은 것을 다시 불러오면 된다. 즉, 커맨드로 할 경우 아래와 같이 하면 된다. 

 

 

1. git pull origin 브랜치이름
   - 오류 발생: Please commit your changes or stash them before you merge.
2. git stash

  - 내 수정사항을 임시 저장공간으로 잠시 옮긴다. 
3. git pull origin 브랜치이름
4. git stash pop
  - 내가 로컬에 수정한 사항과 원격저장소에서 pull 받은 소스가 merge된다.
5. 소스 수정 
6. git add .
7. git commit -m "커밋메시지"
8. git push origin 브랜치이름 

 


 

그런데, 저렇게 잘 해결이 되면 모르겠는데, 애초에 오류를 발생시키는 원인이 git에 익숙하지 않아서이다보니, 중간에 Please commit your changes or stash them before you merge. 구문을 봤는데 여기서 stash가 아니라 commit을 했고, 이후에 push를 하려고 해도 안 되고  pull도 안 되는 경우가 있다. 그리고 working tree가 더럽다고 나온다던가... 

 

원인) 

 - pull을 안 받고 commit 후 push 시도했으나 실패

 - 로컬에서 파일을 수정, commit하지 않고 push 시도 

   ==> Please commit your changes or stash them before you merge 문구가 뜸

 - stash 또는 commit하라고 했으니, commit해야겠다!는 생각으로

   git add . 하고 git commit -m "커밋메시지" 해서 커밋한 다음 git push origin 브랜치이름 했으나 실패

   ==> ![rejected] non-fast-forward 문구가 뜸 

(참고로 파란색 conflict는 내 브랜치 이름이다.) 

 

이럴 경우 애초에 pull 받지 않고 push 한 게 가장 큰 문제다... 

아마도 pull을 하다 충돌이 나서 당황하다가 '그럼 push 한 번 해볼까?'해서 commit하고 push하려다가 이 오류를 발생시키는 것 같다. 

 

git pull origin 브랜치이름 하면 merge가 (브랜치이름|MERGING) 

이렇게 될텐데 그러면 편집기(Eclipse, STS, VSCode 등) 열어서 수동으로 conflict 해결해준 뒤 merge 하면 된다. 

 

 

다음번에 또 팀원분들이 저 상황이 닥쳐서 부르면 그때는 캡쳐를 해와서 설명을 추가해야겠다. 

오늘껀 커밋 수가 차이가 너무 많이 나서 어찌어찌하다 체리픽으로 해결했는데, 팀원 덕택에 체리픽 처음 써봤다. 

너무 신기한 게 사람이 여러명이니까 다 사용패턴이 달라서 그런건지 생전 처음 보는 오류들도 나오고, 나도 잘 몰랐던 거 배워가고... 좋은 것 같다. 

밤이 늦어서 그럼 이만... 다들 행복한 git생활 하시기를.

반응형