강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

Git & GitHub, 원리부터 차근차근 - 근본깃 [기초편]

머지 #3-way merge #git merge

3-way merge에서의 conflict를 해소할 수 있는 4가지 방법

해결된 질문

작성

·

16

0

안녕하세요, geek님.

영상 16:55~ 부분에서 설명해주시는 conflict를 해결할 수 있는 방법에 대해서 다음 네 가지를 설명해주셨습니다.

  1. main 브랜치 쪽 diff를 더한다.

     

  2. test 브랜치 쪽 diff를 더한다. (선택됨)

  3. 둘 다 더한다.

  4. 둘 다 더하지 않고, 아예 다른 내용을 적는다.

그리고 예제에서는 2번 방식을 선택해주셨고, 이에 따라서 머지 커밋은 다음과 같이 계산됩니다.

base(red) + main 최신 커밋과의 diff(green) + test 최신 커밋과의 diff(blue)

즉, 3개가 더해져서 만들어지는 커밋인데요. 이로 인해 3-way merge라는 이름으로 불린다고 이해했습니다.


여기서 질문이 생기는데요.

만약 1번 방식을 선택한다면, 머지 커밋이 다음과 같이 계산됩니다.

base(red) + main 최신 커밋과의 diff(green)

즉, 2개가 더해져서 커밋이 만들어집니다.

그런데 앞서 말씀하신 내용을 고려하면 머지의 세부 명칭(예를 들어 3-way merge같은)에 영향을 주는 요소는 '커밋 히스토리의 모양'입니다.

따라서 2개가 더해져서 커밋이 만들어지는 이 상황도 여전히 3-way merge라고 부를 수 있습니다.


그래서 처음 들었던 의문은 "1번 방식을 택했을 때는 2개가 더해지는 건데, 이때도 3-way라고 부르는 것은 그냥 관례적인 표현인가?" 입니다.

그리고 질문을 작성하면서 제가 스스로 내린 답변은 "더하는 개수가 3개여야 하는 것이 아니고, 더할지 말지 고민하는 기준점이 3개인 상황이라 3-way라는 이름이 붙은 것 같다" 입니다.

즉, 커밋 히스토리가 예제와 같은 상황에서는 다음 3가지를 기준점으로 사용하게 됩니다.

  • 두 브랜치의 공통 부모 (base)

  • main 브랜치의 최종 커밋

  • test 브랜치의 최종 커밋

각 기준점에 대해 어떤 판단을 내리느냐에 따라 세 개를 더하는 2번 상황이 되거나 두 개를 더하는 1번 상황이 되거나, 또 다른 3번, 4번 상황이 될 수도 있습니다.

하지만 '기준점이 3개'라는 사실을 모든 상황에서 동일하기 때문에 3-way merge라는 이름이 붙여진 것으로 판단했습니다.


가르쳐주신 내용에 혼란을 느낀 부분을 서술하느라 글이 좀 길어졌는데, 결론적으로 '기준점이 3개라서 3-way merge라고 부른다'는 제 판단이 적절한지 여쭤보고 싶습니다.

답변 2

0

geek님의 프로필 이미지
geek
지식공유자

안녕하세요, dev.rudevico 님 😀

네, 적절합니다. 제가 강의에서 설명한 내용은 판단해주신대로 입니다.

강의를 만들면서 dev님과 비슷한 고민을 많이했던 터라, 저와 이야기가 잘 통할 것 같은 기분이 드네요 ㅎㅎ

dev.rudevico님의 프로필 이미지
dev.rudevico
질문자

좋은 말씀과 답변 감사합니다! geek님이 걸으셨던 고민의 길을 저도 비슷하게 걷는다고 생각하니 더 힘이 되네요.

남은 강의도 잘 따라가 보겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. dev.rudevico님, 3-way merge의 개념에 대해 깊은 고민을 하셨군요.

3-way merge란?

3-way merge는 Git에서 병합할 때 사용하는 일반적인 기법으로, 다음 세 가지 기준점을 기반으로 병합이 이루어집니다:

  1. 공통 조상 커밋(base): 두 브랜치가 분기되기 이전의 마지막 공통 커밋입니다.
  2. 현재 브랜치의 최신 커밋: 예를 들어, main 브랜치의 최신 커밋.
  3. 머지하고자 하는 브랜치의 최신 커밋: 예를 들어, test 브랜치의 최신 커밋.

3-way merge는 이 세 가지 기준점을 사용하여, 충돌이 발생하지 않는 한 병합 커밋을 만들어 냅니다. 충돌이 발생했을 경우에는 사용자가 4가지 방법 중 하나를 선택하여 수동으로 해결할 수 있습니다: main의 변경을 취하거나, test의 변경을 취하거나, 두 변경을 모두 반영하거나, 완전히 새로운 내용을 작성하는 것입니다.

‘기준점이 3개라서 3-way merge라고 부른다’는 판단

네, dev.rudevico님의 판단이 맞습니다. ‘3-way’라는 명칭은 사용되는 커밋 기준점이 세 가지로 나뉘기 때문에 붙여진 이름입니다. 즉, 실제로 병합 중 두 개 이상의 변경이 적용되지 않더라도, 기본적으로 세 개의 기준점을 고려하여 병합을 수행하기 때문에 3-way merge라고 부릅니다.

기준점이 세 개로 구성되기 때문에 기본적으로 3-way merge라 칭하며, 더하는 개수는 상황에 따라 변동될 수 있습니다.

질문에 대한 보다 깊이 있는 이해와 설명을 원하신다면, 다음 링크를 참고해 도움을 받으실 수 있습니다:
- Git 병합의 기본 개념

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dev.rudevico님의 프로필 이미지
dev.rudevico

작성한 질문수

질문하기