[Git] Rebase vs Merge
💡 해당 내용은, 생활코딩 영상을 기반으로 작성하였습니다.
브랜치 병합하기
병합 방법 2가지 : Merge vs Rebase
Merge
git checkout feature
->git merge master
- Master Branch 작업 내용과 Feature Branch 작업 내용이 각각 base로 부터 진행되다가 feature branch로 합해짐
Rebase
git checkout feature
->git rebase master
- history가 일렬로 나아감 : Master Branch 작업 내용 -> + -> Feature Branch 작업 내용
- 다른 사람과 공유하지 않은 커밋 작업들에 대해서만 진행해야함
Merge & Rebase 비교하기
공통점
- 병합 과정을 거친 최신 커밋 내용이 동일하다.
- 즉, base -> Master Branch + Feature branch -> feature branch
차이점
- 커밋 히스토리 전개 방식
- Merge : 히스토리가 병렬로 진행되어 버전 히스토리 보기가 어려움
- Rebase : 히스토리가 일렬로 진행되어 히스토리 보기가 쉬움
- 난이도
- Merge : 비교적 쉽고, 안전함 (초보 권장)
- Rebase : 어렵고, 위험함
Merge & Rebase 로그 확인
git rebase master
: rb branch의 조상은 base (643c662)였는데, rebase 후에는 M2 Master의 최신 커밋을 조상으로 함
git rebase master
: rb branch의 조상은 base (643c662)였는데, rebase 후에는 M2 Master의 최신 커밋을 조상으로 함git merge rb
- master 쪽으로 rb의 커밋내용을 가져오는데,
- 지금 상황에서는 master이 rb에 포함된 상황이라 Fast Forwarding 방식으로 Master 브랜치가 rb 브랜치가 위치한 곳으로 빠르게 이동하게 됨
Rebase 충돌 다루기
충돌내기
- 임시 저장소의 R1과 초기 R2의 소스코드 차이점만을 가지고 있는 Fetch 라는 형태의 정보가 임시 저장소에 저장됨. -> 그리고 R1 & 후기 R2 의 패치 저장 -> R2 & R3의 패치가 저장됨 -> 임시 저장소에 보관되어 있는 R1의 패치가 M1에 Merge됨
f1.txt 때문에 충돌난 모습
❗ rebase conflict 해결 방법 ❗
git status
: 무슨 파일 때문에 충돌났는지 확인vim f1.txt’ >
git add f1.txt` : 해당 파일 열어 확인 후 충돌난 부분 수정하기git status
: 수정 후 확인하게 되면 rebase 충돌이 해결된 것 확인 가능git rebase --continue
: rebase 를 다시 진행함- 또 충돌 > 충돌난 부분 수정 >
git add f1.txt
>git rebase --continue
- 해결된 모습
- rb는 master 브랜치의 작업 내용을 포함할 뿐만 아니라, 본인 브랜치 결과를 병합한 내용 모두 포함함
- 즉, rb의 히스토리를 가지치기 없이 깔끔하게 한줄로 보여줌
추가 명령어 모음
git checkout -b 브랜치명
: 브랜치를 생성함과 동시에 체크아웃하는 명령어git log —decorate —all —oneline —graph
: 모든 브랜치의 로그를 한 줄의 그래프로 보여주는 명령어git commit -am 커밋메시지
:git add
와git commit
을 동시에 해줌git rebase master
: rb 브랜치의 최초 커밋의 베이스(base)를 master 브랜치의 최초 커밋으로 베이스를 바꾸겠다(rebase)라는 뜻
맥북 Tip
- ; 를 눌러 quote > 상태가 되었을 때 : Control + C 를 누르면 탈출
- 백틱 (`) 누르기 : 원화 표시(₩)가 있는 곳을 영어 상태에서 누르면됨
Leave a comment