본문 바로가기

GIT

[GIT] Git merge 충돌 발생 시 해결

GIT 을 사용하다보면 merge 를 해야하는 경우가 종종 발생합니다.

 

예를 들어, develop branch 에서 작업 후 production 에 반영하기 위해 merge 를 하는 경우가 대표적입니다.

 

이러한 경우 예상치 못한 상황으로 인하여 conflict 가 나는 경우가 있습니다.

최신화가 되지 않았거나, 중간에 hotfix 로 인하여 일부분이 급하게 수정되는 경우가 존재합니다.

 

이처럼 상황에 맞게 강제로 한쪽 branch 의 형태로 다른 branch 가 merge 되어야 합니다.

만약 develop branch 에 있는 소스를 master 로 강제로 merge 한다고 가정했을 때

여기서 merge 가 되어야 하기 때문에 history 를 조작하는 branch 를 B(master),

merge 가 되어야 하는 source 를 가지고 있는 branch 를 A(develop) 라고 가정하겠습니다.

 

 

방법은 여러가지가 존재하지만 이번에 설명드리는 방법은

A 를 충돌 나기 전 history 로 돌려 B 를 merge 하는 방법

입니다.

 

git log --stat 로 git history 를 보면, 다음 내용과 같이 해당 B branch 의 HEAD 가 어딘지 알 수 있습니다.

commit 935bafd6fa8f939030d0c0c6c9db317261f2c650 (upstream/master, master)

 

해당 A 에서 B 를 merge 했을 때 충돌이 나지 않을 만한 위치의 commit 으로 reset 해줍니다.

 

git reset --hard [해당 commit ID]

    ex) git reset --hard 9e819b85f85c6f443adf1a46973a02a5555b422f

 

그 후, 이전에 충돌이 발생했던 B 에 A 를 merge 하면 충돌이 나기 이전 시점에서 merge 를 하는 것이기 때문에 A 의 source 로 B 가 변경됩니다.

 

 

만약, 충분히 이전의 시점으로 가도 충돌이 발생하는 경우에는 해당 branch 를 제거하고 다시 받는게 더 나을 수도 있습니다.

 

 

 

 

'GIT' 카테고리의 다른 글

[GIT] Git pull 전략 (default, --ff -only, --rebase)  (2) 2020.11.24
[GIT] Git merge 충돌 발생 시 해결  (0) 2020.04.27
특정 Branch 만 git clone 받기  (0) 2019.07.14