inflearn logo
강의

講義

知識共有

Git & GitHub、原理から一歩ずつ - 根本Git [AI吹き替え]

マージ #3-way merge #git merge

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

解決済みの質問

136

devrudevico

投稿した質問数 44

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가지를 기준점으로 사용하게 됩니다.

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

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


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

git github

回答 2

0

geek

안녕하세요, dev.rudevico 님 😀

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

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

1

devrudevico

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

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

0

communityai8509

안녕하세요, 인프런 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 병합의 기본 개념

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

깃 풀(git pull)에 대한 궁금증이 있습니다!

0

14

1

섹션7 수업자료 업로드 부탁드립니다.

0

22

2

gitforwindows에서 맥은 뭘 다운받아야 하나요...?

0

31

2

d-day count소스및 그라비티에서 기술하면 뭔가 내용이 안나오네요

0

21

1

간단한 사이드 프로젝트 작성에도 Max 요금제를 결제하는게 좋을까요?

0

57

2

git 커밋한 내용 궁금합니다.

0

27

1

충돌의 최소화 파트 질문입니당!

0

28

1

자바스크립트 파일 중, DOM 영역에서 querySelector가 아닌 다른 함수를 쓰는데 괜찮을까요?

1

81

2

48강에 필요한 아스키아트 자료가 첨부되어 있지 않습니다.

0

54

2

mac python 3.10 - permission denied

0

54

1

26강 [게임 메인 루프 및 메뉴 구현]에서 2가지 오류가 있어서 남기게 되었습니다.

0

69

2

Rider에서 .ignore 플러그인으로 .gitignore 파일 내용 생성시 Csharp으로 검색되는 내용이 없습니다.

1

67

2

EC2 설정보다 RDS를 먼저 설정하는 이유

0

102

1

pull할때

0

41

1

강의 마지막에 언급하는 '다음 강의'란?

0

85

1

궁금해요

0

85

3

git checkout 되돌리기

0

214

2

파일별 git checkout

0

71

1

git branch 결과

0

90

2

8강 git status 관련 질문

0

74

2

머지 2번째 강의 pdf가 자료에 빠져있는 것 같습니다.

0

69

1

geek 강사님!

1

77

1

git diff는 언제 사용하나요?

0

179

2

staging area 질문있습니다.

0

138

2