본문 바로가기
Git

[TIL] Git pull 충돌 에러!! (error: Your local changes to the following files would be overwritten by merge:)

by pin9___9 2022. 11. 3.
728x90

에러 코드

error: Your local changes to the following files would be overwritten by merge:

git에서 pull 할 시 이러한 에러가 뜨는 경우가 있습니다. 혹시나 하는 마음으로 git status로 상태를 확인해 봤더니 일부만 적용되고 대부분은 적용되지 않았습니다. 

 

그림1. 에러메세지

원인

이 에러의 원인은 로컬에서 추가한 파일이나 변경한 내용이 commit 이 안되어 remote 변경사항과 충돌이 일어나서 발생한다고 합니다.

 

아마 제가 코드 수정 중에 팀원이 맡은 부분을 완성시켜 push를 했고, 팀원이 최신화한 파일을 확인하기 위해 수정 중이었던 파일이 있는 directory에 pull 하려 시도하다 발생한 것 같습니다.

 

해결방법 

1) git stash

git stash란?

아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어입니다. 이를 통해 아직 마무리 짓지 못한 작업을 commit하지 않고 저장해둔 뒤 나중에 다시 꺼내와 마무리할 수 있습니다.

 

그림2. 상태보기

위 사진을 보시면 working directory안에 변경된 파일들이 보입니다. 아직 작업이 마무리되지 않았기 때문에 add나 commit을 해주지 않고 stash로 임시 저장하겠습니다!!

 

1. git stash save - (저장하기)

$ git stash save

save는 생략할 수 있고, save 뒤에 내용을 나타내는 메시지를 저장할 수 있습니다.

 

그림3. git stash 결과

git stash 나 git stash save를 실행하면 stack에 새로운 stash가 만들어지면서 working directory는 비워지게 됩니다.

 

2. git pull

$ git pull

working directory가 비워져 있기 때문에 다시 git pull을 시도하면 잘 작동이 됩니다.

 

그림4. git pull 결과

3. git stash pop - (작업 되돌리기)

$ git stash pop

git stash pop 은 일시적으로 저장해 둔 작업을 다시 되돌립니다. 여기서 인수를 지정하지 않으면 저장된 작업 목록 중 가장 최근에 저장된 작업을 복원하고, stash@{1}과 같이 인수를 지정하면 특정 작업을 선택하여 복원할 수 있습니다.

 

그림5. git stash pop 결과

작업을 되돌릴 시 자동으로 병합해 주는데 충돌이 일어나는 것을 볼 수 있습니다.

CONFLICT (content): Merge conflict in templates/index.html

각각의 브랜치에서 변경한 내용이 같은 행에 포함되어 있기 때문에 발생한다고 합니다. 

실제로 들어가서 보면,

<<<<<<< HEAD
HEAD에 있는 내용
=======
pull 해온 파일과 HAED가 충돌된 내용
>>>>>>> index

 

충돌이 있는 부분에 git 이 자동으로 충돌 정보를 포함하여 파일 내용을 변경합니다. 그 충돌된 부분을 수정해서 커밋하면 해결됩니다!!

728x90

'Git' 카테고리의 다른 글

[Git] git push 안될 때 (error : src refspec main does note match any)  (0) 2023.03.09
[TIL] Git 협력자(Collaborator)  (0) 2022.11.02
[TIL] Git  (0) 2022.10.31

댓글