오뚝이개발자

[Git] Merge Conflict 발생 시 해결 방법, Git pull 오류 시 강제로 실행 본문

카테고리 없음

[Git] Merge Conflict 발생 시 해결 방법, Git pull 오류 시 강제로 실행

땅어 2022. 12. 18. 21:52
728x90
300x250

 

서로 다른 두 개의 브랜치에서 작업하다가 브랜치를 합칠 때 충돌이 생기는 것을 merge conflict(병합충돌)라고 한다. 보통 둘 이상의 사람이 협업을 할 때 발생하곤 하는데 서로 다른 브랜치에다 작업을 하다가 최종적으로 프로젝트의 큰 흐름을 담고 있는 master 브랜치로 합칠 때 이런 문제가 자주 발생한다. Git은 기본적으로 Version Control Service(VCS)이다. 때문에 merge conflict가 발생하면 pull을 할 수가 없다.(만약 이러한 상황을 무시하고 그냥 pull을 가능하게 만들어버리면 사용자의 로컬에 있는 파일들이 모두 리모트 저장소의 코드로 덮어씌워져 버리기 때문이다.) 물론, 이와 동일한 이유로 pull뿐만 아니라 commit도 되지 않는다.

이러한 merge conflict는 서로 동일한 이름의 파일동일한 부분을 서로 다르게 수정했기 때문에 발생한다. 이런 경우 Git에게 사용자가 어떠한 부분을 선택해 최종 수정본에 반영할 것인지를 알려주어야 conflict를 해결할 수 있다. 왜냐하면 Git은 어떤 것으로 최종 수정 사항에 반영해야 하는지를 모르기 때문이다.

이러한 경우에 자신의 로컬에 있는 코드들을 리모트 저장소에 있는 코드들로 강제로 덮어씌워서 해결하는 방법도 있다. 가령, 자신이 코드에서 어떤 부분을 잘못 수정해서 그냥 처음으로 되돌려 다시 작업을 하고 싶다거나 혹은 자신이 작업하지 않는 다른 브랜치(그러니까 merge하려는 브랜치)의 내용을 우선적으로 반영하고 싶은 경우가 그러하다.

이런 경우 아래와 같은 커맨드를 사용해 강제로 git pull을 실행해 conflict를 해결할 수 있다. 아래 방법은 Repository에서 최신 commit 정보를 가져와 강제로 HEAD를 옮긴 후 저장하는 방법이다.

 

1. git pull을 하기 위해 깃허브의 레포지토리에서 모든 커밋 정보를 확인한다.

$ git fetch --all

2. git reset을 통해 HEAD가 최신 커밋 정보를 가리키도록 한다.

$ git reset --hard origin/master

reset은 HEAD의 위치를 옮기는 명령어이고, --hard 옵션은 강제로 깃명령어를 실행하는 옵션이다. 뒤의 origin/master는 해당 브랜치의 이름에 맞게 수정해주면 된다. 만약 자신의 레포지토리의 경우 마스터 브랜치의 이름이 master라면 git reset --hard master라고 입력하면 된다.

3. 이제 git pull을 통해 가져온 정보를 저장한다.

$ git pull

 

 

 

728x90
300x250
Comments