rebase 와 3-way merge 의 근본적인 차이
103
投稿した質問数 3
안녕하세요.
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 를 사용해야 할 필요가 있을까요?
回答 2
1
안녕하세요, yuntae.kang 님 😀
rebase는 동료와 협업할 때 특히 유용합니다.
왜냐하면 커밋 히스토리를 단순하게 유지할 수 있기 때문이에요.
이에 대한 내용은 "동료와 협업할 때 conflict 해결하기 #github #rebase" 회차를 참고해주세요!
1
안녕하세요, 인프런 AI 인턴입니다. yuntae.kang님, Rebase와 3-way merge의 차이에 대해 질문주셨군요.
Rebase와 3-way merge의 근본적인 차이
Rebase:
- 목적: 커밋 히스토리를 아우르며 변경사항들을 병합하여, 히스토리를 “평탄하게” 만듭니다. 커밋의 히스토리가 마치 단일 브랜치에서 개발된 것처럼 보이도록 합니다.
- 특징: 원래 커밋 히스토리를 재구성하여 하나의 직선 형태로 만들어 줍니다. 이 과정에서 충돌이 발생하면 수동으로 해결해줘야 합니다. rebase 후, 브랜치는 최신 커밋을 가리키게 되는 특징이 있습니다.
- 사용 사례: 히스토리를 모던하고 깔끔한 형태로 유지하고 싶을 때, 협업에 있어 각각의 커밋이 각각의 변경 사항을 잘 표현해주는 경우에 유리합니다.
- 목적: 커밋 히스토리를 아우르며 변경사항들을 병합하여, 히스토리를 “평탄하게” 만듭니다. 커밋의 히스토리가 마치 단일 브랜치에서 개발된 것처럼 보이도록 합니다.
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
705
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

