본문 바로가기
6. 개발도구/6_3 GIT

[Git (6)] git pull 에러 해결방법 (Your local changes to the following files would be overwritten by merge )

by 갓대희 2020. 5. 17.
반응형

[Git (6)] git pull 에러 해결 (Your local changes to the following files would be overwritten by merge )

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ git pull 충돌 에러 해결방법 입니다. : ) 

 

 

1. 원인

Git을 사용하여 작업을 하다가 원격 리파지토리(remote repository)에서 단순히 소스를 땡겨오려할 때(pull) 다음과 같은 에러 메세지를 본적이 있을 것이다. 

ex)

# git merge
Updating e4ea95d..f5ebfb7
error: Your local changes to the following files would be overwritten by merge:
        소스~
Please commit your changes or stash them before you merge.
Aborting

# git merge commit
merge: commit - not something we can merge

 

여러 브랜치도 파일 수정시 여러 사람들이 작업하다보면 충돌이 나지만,

한 브랜치(ex master)에서도 여러 사람들이 작업하다보면 충돌이 발생할 것이다.

 

예를들어 내가 수정한 파일을 다른사람이 push한 경우 해당 파일에 충돌이 발생할 것이다.

해당 오류를 인텔리제이로 작업하였을때를 살펴보면 다음과 같다.

 

2. 해결 방법


 - 에러 메세지를 자세히 살펴 보면 사실 해결 방법이 나와 있다.

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 status로도 확인 가능하다.

git status
On branch master
Your branch is behind 'origin/master' by 29 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   소스~

no changes added to commit (use "git add" and/or "git commit -a")

※ 참고

● fast-fowarded

 - 빨리감기 병합 이라고 한다.

 - fast-fowarded가 발생할수 있는 케이스가 여러개 있지만, 단순히 그냥 "빨리감기"가 가능한 상황이라고 볼 수 있다.
 - 별도의 commit log없이 최신의 commit log를 가리키게 만드는 것이라고 볼수 있다.

 

▶ 해결방법 1 : git stash

 - 현재 디렉토리의 파일을 임시로 백업하고 깨끗한 상태로 돌린다. 

 - 버전관리 되는 대상 파일들을 임시저장 해둔다고 보면 된다. 

1) 해당 명령어를 통해 현재 Staging 영역에 있는 파일의 변경사항을 스택에 넣어 둔다.

#git stash

2) master에서 pull하거나, git checkout 등 원격 저장소에서 내 로컬 브랜치로 변경사항을 적용한다.

# git pull origin master

 

3) 변경 사항을 적용하고, 스택에서 제거 한다.

# git stash pop 


한번에 실행 할 수도 있다.

# git stash && git pull origin master && git stash pop

이후 정상적으로 git pull이 가능 한 것을볼 수 있다.

 

 

▶ 해결방법 2 : git add

 - 위와 같은 방법으로 간단히 해결할 수도 있지만 git status를 통해서 가이드를 확인했듯이

git add를 통해 해당 파일을 staging 영역에 저장하고 git pull 작업을 해도 해당 오류는 해결 가능하다.

ex)

git status
On branch master
Your branch is behind 'origin/master' by 29 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   소스~

no changes added to commit (use "git add" and/or "git commit -a")

 

반응형

댓글8