깃허브

로컬에서 브랜치 병합 및 충돌 상황 이해하기

syleemomo 2024. 1. 22. 21:26
728x90

* 로컬에서 브랜치 병합하는 방법

로컬에서 브랜치 병합하는 원리

main 브랜치에서 test 파일을 생성하고 a_ 라는 코드를 추가한다. 해당 변경이력은 로컬저장소에 커밋한다. modal 브랜치를 생성하고, 해당 브랜치로 이동한다. 여기서 기존의 test 파일에는 c_코드를 두번째 줄에 추가하고, new 라는 새로운 파일에는 b_ 코드를 추가한다. 그 다음 해당 변경이력을 마찬가지로 로컬저장소에 커밋한다. 

브랜치를 병합하려면 main 브랜치로 먼저 이동한다. 여기서 git merge [통합하려는 브랜치명] 을 실행하여 특정 브랜치의 변경이력을 main 브랜치에 통합한다. 이때 main 브랜치의 a_ 코드와 modal 브랜치의 a_ 코드가 동일하면 성공적으로 병합이 이루어지며, main 브랜치는 그저 modal 브랜치의 변경이력을 그대로 반영한 것이기 때문에 이를 빨리감기(Fast-forward) 병합이라고 한다. 만약 두 브랜치의 a_ 코드가 다르면, 병합시 충돌이 발생하게 된다.

 

 

* 로컬에서 브랜치 병합시 충돌상황 이해하기 

로컬에서 깃 브랜치 병합을 시도하는 상황

main 브랜치에 파일을 생성하고 a_ 라는 코드를 추가한 다음 커밋한다. alarm 브랜치를 생성하고 해당 브랜치로 이동한다. 해당 브랜치에서 기존 파일에 b_ 코드를 추가한 다음 다시 커밋을 진행한다. main 브랜치로 다시 이동한다. 이제 header 브랜치를 생성하고 해당 브랜치로 이동한다. 기존 파일에 c_ 코드를 추가하고 커밋한다.  

병합을 위하여 main 브랜치로 다시 이동한다. 먼저 alarm 브랜치를 병합한다. 그럼 main 브랜치에는 a_, b_ 코드가 존재한다. 그 다음 header 브랜치 병합을 시도한다. 이때 상황에 따라 아래 두가지로 나뉜다. 

첫번째, 병합된 main 브랜치의 a_ 코드와 header 브랜치의 a_ 코드가 동일한 경우 위와 같이 성공적으로 병합이 이루어진다. 

두번째, 병합된 main 브랜치의 a_ 코드와 header 브랜치의 a_ 코드가 다른 경우 위와 같이 병합중 충돌이 발생한다. 이때는 직접 충돌난 부분의 코드를 수정하고 다시 커밋하면 된다. 

 

* 로컬저장소와 원격저장소 병합시 충돌상황 이해하기

로컬저장소와 원격저장소 병합 상황

내 pc 의 main 브랜치에는 a_, b_ 코드가 포함된 파일이 있다. 이를 커밋하고 깃허브(원격저장소)에 푸쉬한다. 다른 개발자가 자신의 pc 에서 깃허브에 저장된 파일(a_,b_ 코드가 포함된)을 pull 해서 다운로드 받는다. 다른 개발자는 다운로드 받은 파일에 c_ 라는 코드를 추가한다. 그런 다음 커밋하고 깃허브에 푸쉬한다. 

나는 main 브랜치에서 현재 파일(a_, b_ 코드가 포함된)에 d_ 코드를 추가하고 커밋한다. 곧바로 깃허브에 푸쉬를 하려고 할때 충돌이 발생한다. 깃허브에는 현재 파일에 a_, b_, c_ 코드가 포함되어 있고, 내 로컬 pc 에는 a_, b_, d_ 코드가 존재하므로 차이에 의하여 병합시 충돌한다.

로컬브랜치와 원격저장소 충돌 해결하기

이를 해결하기 위해서는 위와 같이 먼저 깃허브(원격저장소)의 변경이력을 pull 해서 내 소스코드에 반영해야 한다. 그러면 내 파일에는 a_, b_, c_, d_ 코드가 존재한다. 그런 다음 push 를 수행하면 충돌없이 원격저장소와 병합이 이루어진다. 

728x90