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は履歴を整理する、開発者向けの強力なツール。状況によって使い分けることで、チームの開発効率と履歴の可読性を両立できます。