Post

Git: merge와 rebase의 차이

Git: merge와 rebase의 차이

사이드프로젝트 회의를 하는데 새로들어오신 분이 왜 merge방식을 사용하는지에 의문을 가지셨다.
스프린트 별로 브랜치를 파서 거기에 머지를 하는 방식보다 rebase를 하는게 훨씬 깔금한게 아닌지에 대한것이었다.

간단하게만 알고 있어서 완벽히 이해한게 맞는지는 모르겠지만 ! mergerebase의 차이점을 다시 한번 정리하고자 한다.


$git merge

merge두 개의 브랜치를 합쳐 새로운 커밋을 생성하는 명령어

브랜치 간의 공통 조상으로부터 양쪽의 변경 사항을 병합하고, 그 결과를 새로운 merge commit으로 남긴다.

✅ merge 결과

  • 히스토리가 직관적이고, 변경 흐름을 그대로 보존
  • 팀 협업 시, 누가 어떤 시점에 병합했는지가 명확히 드러남
  • 하지만 merge commit이 많아질수록 히스토리가 복잡해질 수 있음.

merge diagram


$git rebase

rebase한 브랜치의 시작점을 다른 브랜치의 최신 커밋으로 옮겨서, 커밋 이력을 새로 쌓는 명령어

즉, “기반(base)”을 새로 설정한다는 뜻

✅ rebase 결과

  • 커밋 이력이 직선(linear) 형태로 깔끔하게 정리
  • merge commit이 생기지 않아 히스토리가 단순
  • 하지만 이미 push한 브랜치를 rebase하면 충돌이나 꼬임이 생길 수 있어, 공유된 브랜치에는 사용을 피해야 함.

rebase diagram


merge vs rebase 비교

구분mergerebase
병합 방식새로운 merge commit 생성커밋을 재정렬하여 base 변경
히스토리 형태분기(branch) 유지직선(linear)
이력 보존원래 브랜치 흐름 보존재작성됨
충돌 처리병합 시 한 번커밋마다 발생 가능 (커밋 단위로 순차 적용하기 때문)
사용 시점협업 중인 main 병합 시개인 브랜치 정리 시

+ merge –squash

명령어설명
git merge브랜치의 이력을 모두 보존하며 합침
git rebase이력을 다시 쌓아 linear하게 정리
git merge --squash여러 커밋을 하나로 압축해서 병합

squash merge는 “이력은 깔끔하게, 결과만 남기고 싶을 때” 사용하는 병합 방식


🔹 어떤 걸 써야 할까?

  • 협업 브랜치(main, develop 등): merge → 이력 보존이 중요하고, 협업 흔적을 남기기 좋음

  • 개인 브랜치(feature, fix 등): rebase → 불필요한 병합 이력을 없애고 깔끔한 히스토리를 유지하기 좋음

하지만 master 대신에 bts-image에 병합하기 전에 master를 리베이스하면 rebase도 충분히 매력적인 명령어이다 !

diagram


마무리

  • merge: 기록을 보존하며 합침
  • rebase: 기록을 정리하며 합침

Reference

이 포스트는 아래 게시글의 정보 및 이미지가 사용되었습니다.

  1. Merge vs Rebase

END

This post is licensed under CC BY 4.0 by the author.