【Git】rebaseとmergeの違いと使い分け

Git

Gitで複数のブランチを統合する方法には、mergeとrebaseの2種類があります。どちらも目的は「別ブランチの変更を取り込む」ことですが、履歴の残り方や扱い方が異なります。正しく理解して使い分けることで、履歴をきれいに保ち、チーム開発を円滑に進められます。

mergeとは

mergeは、2つのブランチを統合して新しいマージコミットを作成する方法です。元の履歴をそのまま残すため、どのブランチでどんな作業が行われたかが明確に分かります。

# featureブランチをmainに統合
git checkout main
git merge feature

マージコミットが追加されるため、履歴は枝分かれしてから再び一つにまとまる形になります。

rebaseとは

rebaseは、あるブランチのベースを付け替えて、履歴を一列に並べ直す方法です。不要なマージコミットを作らず、直線的できれいな履歴を作れます。

# featureブランチをmainの最新に付け替える
git checkout feature
git rebase main

この操作により、featureブランチのコミットがmainの直後に積み上がる形で再配置されます。

履歴の違い

方式 履歴の特徴 メリット デメリット
merge 枝分かれと統合の形が残る 履歴が正確に残る、コンフリクト処理は一度だけ 履歴が複雑になりやすい
rebase 一列に整理された履歴になる 履歴がシンプルで読みやすい コンフリクトがコミットごとに発生する可能性がある、公開済みブランチでは危険

使い分けのポイント

– **mergeを使う場面**
チーム開発で履歴を正確に残したい場合や、公開済みブランチを統合する場合に適しています。mainやdevelopへの取り込みは基本的にmergeを使うのが安全です。

– **rebaseを使う場面**
自分の作業ブランチを最新のmainに追随させるときに使います。履歴を直線的に整理できるため、レビュー時に差分が分かりやすくなります。ただし、共有済みのブランチをrebaseするのは避けるべきです。

実用例

作業ブランチを最新に追随させるときはrebase、本流に統合するときはmerge、という使い分けが一般的です。

# 作業ブランチをmainに追随させる
git checkout feature
git fetch origin
git rebase origin/main

# mainに統合するとき
git checkout main
git merge feature

まとめ

mergeは履歴を正確に残す、安全な統合方法。rebaseは履歴を整理する、開発者向けの強力なツール。状況によって使い分けることで、チームの開発効率と履歴の可読性を両立できます。