본문 바로가기

DEVELOP/GIT

[Git] Git에서 conflict가 발생했을 때 해결하는 방법

반응형

 

 협업 프로젝트에서 여러 사람이 같은 파일을 수정하고 git을 사용해 업데이트나 공유를 하다보면, 서로 다른 유저들이 코드의 같은 부분을 수정하면서 conflict가 발생하게 된다. 이런 conflict를 해결하기 위해서는 우선 vscode와 같은 편집 프로그램을 이용하는 방법이 있다. 다음은 같은 파일에서 서로 다른 유저 A, B가 함수를 동시에 수정했을 때를 가정한 케이스다.

 기존의 substract라고 작성되었던 메소드를 A가 multiply라는 메소드로, B 역시 devide라는 메소드로 수정한 뒤 커밋해 주었다. B라는 유저가 먼저 origin에 push를 한 이후 A에서 pull 명령을 통해 origin의 파일을 가져왔다. 코드의 동일한 부분에서 각각 변경이 존재했기 때문에, 자동으로 merge 이루어지지 않고 다음과 같이 conflict가 발생하였다.

 

 위 코드에서 B가 수정한 내용은 Current Change, A가 수정한 내용은 Incoming Change이다. 따라서 위 경우에서 Incoming은 내가 수정한 코드이며, 타인이 수정한 코드는 Current에 해당한다고 보면 된다. 수정하고 싶은 부분을 코드 위 선택지 중에서 고르거나, 또는 코드를 감싸고 있는 <<< >>> 와 같은 꺽쇠를 지우고 임의로 수정할 수 있다. 만약 둘다 적용하고 싶다면 선택지 중 Both를 선택하면 된다. 충돌된 부분을 수정했다면, 다시 add와 commit을 통해 해결된 상태를 업데이트 해준다.


편집프로그램과 커맨드를 이용한 conflict 해결이 아니라, github에서 해결하는 방법도 존재한다. 만약 upstream 레포지토리에 서로 다른 유저가 같은 부분의 코드를 수정해 업데이트하고자 pull request를 할 때, 충돌되는 부분들이 발생하게 될 수 있다. 만약 conflict가 존재한다면 다음과 같이 github 상에서 merge pull request로 들어가 직접 resolve가 가능하다.

 


Reference

 

Resolve simple merge conflicts on GitHub | The GitHub Blog

You can now resolve simple merge conflicts on GitHub right from your pull requests, saving you a trip to the command line and helping your team merge pull requests faster. The new feature helps you

github.blog

 

Git Conflicts

The ImageJ wiki is a community-edited knowledge base on topics relating to ImageJ, an open source image processing program designed for scientific multidimensional images.

imagej.github.io

 

반응형