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 |
---|---|
특정 Branch 만 git clone 받기 (0) | 2019.07.14 |