inflearn logo
강의

Course

Instructor

Git & GitHub, Step by Step from the Principles - Fundamental Git

Resolving conflicts during rebase #conflict #rebase ★

rebase 와 3-way merge 의 근본적인 차이

103

nonanswer94

3 asked

0

안녕하세요.

rebase 단원(이전 강의)의 설명을 들으면서, rebase 란 fast-forward merge 를 수행할 수 있게끔 commit history 를 flatten 해 주는 작업으로 이해했는데요.

rebase 과정에서도 conflict 가 발생하고, 이것을 처리해줄 필요가 있다면, 그냥 3-way merge 에서 conflict 를 처리하는 것과 근본적인 차이가 있을까요?

제 생각으로는 rebase 과정에서는 branch 에서 떨어져 나간 commit 들이 생기고, 3-way merge 에서는 기존 commit 들이 병합된 branch 안에 들어있다, 는 차이 정도밖에 없는 것 같은데요.

굳이 3-way merge 말고 rebase 를 사용해야 할 필요가 있을까요?

git github

Answer 2

1

geek

안녕하세요, yuntae.kang 님 😀

rebase는 동료와 협업할 때 특히 유용합니다.
왜냐하면 커밋 히스토리를 단순하게 유지할 수 있기 때문이에요.

이에 대한 내용은 "동료와 협업할 때 conflict 해결하기 #github #rebase" 회차를 참고해주세요!

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다. yuntae.kang님, Rebase와 3-way merge의 차이에 대해 질문주셨군요.

Rebase와 3-way merge의 근본적인 차이

  1. Rebase:

    • 목적: 커밋 히스토리를 아우르며 변경사항들을 병합하여, 히스토리를 “평탄하게” 만듭니다. 커밋의 히스토리가 마치 단일 브랜치에서 개발된 것처럼 보이도록 합니다.
    • 특징: 원래 커밋 히스토리를 재구성하여 하나의 직선 형태로 만들어 줍니다. 이 과정에서 충돌이 발생하면 수동으로 해결해줘야 합니다. rebase 후, 브랜치는 최신 커밋을 가리키게 되는 특징이 있습니다.
    • 사용 사례: 히스토리를 모던하고 깔끔한 형태로 유지하고 싶을 때, 협업에 있어 각각의 커밋이 각각의 변경 사항을 잘 표현해주는 경우에 유리합니다.
  2. 3-way merge:

    • 목적: 두 개의 기능 브랜치를 병합하여, 새로운 커밋을 생성하는 방식입니다. 서로 다른 브랜치의 작업이 결집되어 하나의 브랜치로 만들어집니다.
    • 특징: 원래의 브랜치 히스토리를 그대로 보존하면서 이력을 병합합니다. 중간에 공통 조상 커밋(Base Commit)을 통해 병합하여 충돌을 해결합니다.
    • 사용 사례: 각 브랜치의 개발 흐름을 명확히 유지하고 싶을 때, 직접적인 병합이 필요할 때 사용합니다.

Rebase의 필요성

  • 클린한 히스토리: 많은 개발자는 간결하고 이해하기 쉬운 기록을 보존하기 위해 rebase를 선호합니다. 브랜치를 기반으로 한 다양한 개발 상황에서 전체 히스토리를 일목요연하게 유지할 수 있습니다.
  • 리베이스는 재배치: 브랜치를 다시 배치하여 동적 이력을 생성할 수 있습니다. 따라서 기능 브랜치를 master에서 이어진 것처럼 다양한 곳에서 적용할 수 있습니다.

유사 질문과 추가 참고 자료

Rebase와 Merge에 관한 자세한 설명과 예제를 이해하시려면 아래 링크를 참조하시기 바랍니다:
- Git Rebase 과정 설명 및 충돌 해결

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

깃헙 작업 완료된 develop 브랜치 질문

0

77

2

[질문] git-flow 에서 release 브랜치 생성

0

58

1

upstream연결하기

0

76

2

gitignore관련 질문

0

86

2

staging area

0

85

2

브랜치 병합 전략에 대한 지식공유자님의 생각이 궁금합니다.

0

97

1

git pull merge 요청 시 draft

0

170

2

문서가 락이 걸어져있네요.

0

77

1

vscode에서의 github로의 푸시

0

106

2

Git 머지 커밋 되돌리기(revert)와 머지 방식 선택의 안전성 질문

0

144

2

git add 동작 원리에 대한 질문

0

65

2

git flow 문의

0

114

2

git rebase 질문

0

100

2

[추가 질문] 똑같은 브랜치를 다시 pull request하는 경우.

0

172

2

pull request 취소하기

0

706

2

.gitignore

0

78

2

Commit 메시지 변경 방법

0

453

2

switch 와 checkout 차이점.

0

299

1

강의자료 누락, commit 복사질문

0

153

4

강의 교재 다운로드

0

104

1

git init에서 오류 발생

0

283

2

[추가 질문] HEAD 와 COMMIT 관계가 궁금합니다.

0

105

2

HEAD 와 COMMIT 관계가 궁금합니다.

0

140

2

github 협업 내용 관련 질문 있습니다

0

92

2