[Git] 3-way 병합

Bam·2022년 4월 7일
0

Git

목록 보기
28/32
post-thumbnail

3-way 병합

지난 포스트에서 다룬 Fast-Forward 병합은 순차적으로 분기되어 작업된 브랜치를 병합하는데 사용한 병합 방식이었습니다. 작업이 순차적으로 진행되기 때문에 병합과정에서 따로 신경써야할 부분은 없었습니다.

오늘 다루는 3-way 병합은 좀 더 복잡한 상황에서의 병합 방식입니다. 다른 개발자와 작업을 진행하게 되는 경우 내가 분기한 브랜치, 다른 개발자가 분기한 브랜치에서 작업이 이루어지게 됩니다.이때 브랜치 상황은 내가 작업하는 브랜치의 커밋, 다른 개발자가 작업하는 브랜치의 커밋, 두 브랜치의 공통 분기점이 되는 공통 커밋 세 가지의 커밋이 남게 됩니다. 그래서 이런 경우의 병합을 세 브랜치들을 종합해서 병합하기 때문에 3-way 커밋이라고 부릅니다.

3-way 병합 실습

지난 포스트에 이어서 위와 같은 파일 구조를 가진 디렉토리에서 실습을 진행합니다. 새로 만들어서 진행해도 상관없습니다.

그러면 3-way 병합을 실습을 통해 알아보도록 하겠습니다.


먼저, Me라는 이름의 브랜치를 생성합니다.

git branch Me

그 다음 Me브랜치로 이동한 뒤 t1.txt파일을 수정하고, 커밋까지 완료해주세요.이후 t2.txt파일도 수정하고 커밋해주세요. 그러면 현재 작업상황은 다음과 같습니다.


이번엔 master 브랜치로 돌아와서 작업을 합니다. t1.txt를 수정하고 커밋해주세요. 이때 Me 브랜치에서 3번째 줄을 수정했었는데, 마스터에서 3번째 줄을 건드리게 되면 병합 충돌이 발생합니다. 병합 충돌에 대해서는 따로 다룰 예정이니, 3번째 줄이 아닌 다른 부분을 수정해주세요. 그 다음 t3.txt도 아무렇게나 수정하고 커밋해줍니다. 현재 진행상황을 그림으로 나타내면 다음과 같습니다.


그러면 이제 브랜치들을 병합해볼 차례입니다. 기준이 되는 공통 부모 커밋, Me 브랜치의 최신 커밋, master 브랜치의 최신 커밋을 가지고 병합을 진행합니다.
3-way 병합은 병합이 완료될 때 커밋을 하나 생성합니다. 기존 마스터 브랜치에 갖다붙여서 브랜치의 최신 커밋이 마스터의 최신 커밋이 되었던 Fast-Forward 병합과는 다른점 입니다. 이때 Merge branch '브랜치명'이라는 커밋 메세지가 자동으로 붙는데, 이 메세지를 바꾸고 싶다면 merge 명령 뒤에 --edit 옵션을 붙여줍니다.

git merge 브랜치이름 --edit

다음과 같은 화면에서 노란 부분의 메세지를 수정해주면 됩니다.
이렇게 3-way 병합을 해봤는데요. 이 과정을 bash에서 graph로 확인해보면 다음과 같이 나타납니다.


브랜치 병합 여부 확인하기

병합을 실습하면서 병합이 완료된 브랜치는 삭제해주는 것이 좋다고 했었습니다. 그런데 실습 상황처럼 브랜치가 한 두개 있지 않다면 어떤 브랜치가 병합이 완료되었고 어떤 브랜치가 작업중인지 알기 어렵습니다. 그래서 깃을 병합된 브랜치를 확인할 수 있는 명령을 제공하고 있습니다.

git branch --merged
git branch --no-merged

git branch --merged는 병합된 브랜치를 보여줍니다. 브랜치가 병합 되었다면, 브랜치 목록에서 브랜치 이름 앞에 별표*가 붙습니다. --no-merged는 그 반대 상황입니다.

profile
나는 나대로🥉

0개의 댓글