git
에서 master
의 branch
를 만들고 작업을 하다보면, pull request
할 때 conflict(충돌)가 나는 경우가 있습니다. 이런 경우는 내가 pull origin master
를 한 후에 다른 작업자가 저와 같은 라인을 수정하고, 그 수정한 내역을 master
와 합쳤을때(merge) 발생합니다.
이렇게 되면 충돌된 코드를 수정해줘야 pull request
를 성공적으로 할 수 있습니다.
해결방법은 이렇습니다.
먼저 git checkout master
로 master
브랜치로 이동합니다. 그리고 git pull origin master
를 해서 최신 업데이트된 리모트 저장소의 master
브랜치를 나의 로컬 master
에 엎어줍니다.
(feature/DDANGDAMUKGI) $ git checkout master # master 브랜치로 이동
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
(master) $ git pull origin master # 리모트 저장소의 최신 master 브랜치를 내 로컬 master에 덮어씌움
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8 (delta 4), reused 7 (delta 4), pack-reused 0
Unpacking objects: 100% (8/8), done.
From https://github.com/wecode-bootcamp-korea/git2
* branch master -> FETCH_HEAD
0349c06..0c73d2d master -> origin/master
Updating 0349c06..0c73d2d
Fast-forward
README.md | 5 +++++
yongjunleeme.md | 2 ++
2 files changed, 7 insertions(+)
create mode 100644 yongjunleeme.md
그리고 나서 git checkout
을 통해 충돌났던 브랜치로 이동하고, 이 브랜치와 최신버전의 로컬 master
브랜치를 merge
해줍니다. 명령어는 git merge master
입니다. 이 과정을 거치면, pull request
를 했을 때 충돌이 났던 상황이 재연됩니다. 다른 작업자가 수정해놓은 최신버전과 현재 내가 수정한 branch
가 충돌하는거죠.
이렇게 충돌된 파일이 확인되면, 편집창에 들어가 해당 파일을 수정하면 됩니다.
(master) $ git checkout feature/DDANGDAMUKGI # 내 작업 브랜치로 이동
Switched to branch 'feature/DDANGDAMUKGI'
(feature/DDANGDAMUKGI) $ git merge master # 최신으로 업데이트 된 master 브랜치를 내 작업 브랜치와 merge
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md # 충돌된 파일 이름은 README.md
Automatic merge failed; fix conflicts and then commit the result.
수정 상황을 따로 캡쳐를 못해서 구글에서 이미지를 하나 퍼왔습니다. 충돌 파일을 수정하러 들어가면, 충돌된 파일이 합쳐져있고, A~C 같은 표식이 자동으로 생성되어있습니다. 이런 표식들은 그대로 저장되니 모두 지워줘야하고요, 현재 파일에서 남기고 싶은 부분만 남긴 다음 저장하면 됩니다.
그리고 나서 다시 git add
, commit
, push
, pull request
를 하면 해결됩니다.
만약 해결을 다해서 pull request
를 하기 전에 다른 사람이 올린게 새로 업데이트되서 master
가 변경된다면 다시 충돌이 날 수 있으니 주의하세요!
항상 감사합니다 ㅠㅠ