Merge는 branch를 통합하는 것이고, Rebase는 branch의 base를 옮기는 것
이력 복잡
분기 이후 main의 변경이 없는 경우
git checkout main
git merge bugfix
분기 이후 main의 변경사항 존재
git checkout main
git merge bugfix
# 충돌 발생 시 해결
git add .
git commit -m 'resolve conflict'
⚠️ main의 변경 사항이 없는(fast-foward 병합이 가능한) 경우에도 다음과 같이 non fast-foward 병합을 사용 가능
git merge --no-ff
→ 기능 브랜치 bugfix에 대한 명확한 그림을 얻을 수 있으므로 기능 브랜치가 시작하거나 끝나는 위치를 쉽게 찾고 기능 브랜치에 대한 변경 사항을 추적할 수 있음
이력 단순
git checkout bugfix
git rebase main
# 각 커밋에서 충돌 시 수정 필요
git add .
git rebase --continue
# fast-foward
git checkout main
git merge bugfix