Git Merge と Rebase: それぞれの使いどころ

git merge と git rebase の違いを理解し、それぞれの統合戦略の長所・短所・ベストプラクティスを解説します。チームに最適なワークフローが見つかります。

git merge feature-branch

詳細な説明

Merge と Rebase: 何が違うのか?

どちらもあるブランチの変更を別のブランチに統合しますが、方法が異なります:

  • git merge は2つのブランチ履歴を結合する新しいマージコミットを作成します。
  • git rebase はコミットを対象ブランチの先頭に再適用し、直線的な履歴を作成します。

Git Merge

git checkout main
git merge feature-branch

これは2つの親を持つマージコミットを作成します。完全なブランチ履歴が保存されます。

長所: 非破壊的で、並行して行われた作業の完全なコンテキストが保持される。 短所: 頻繁に merge するとログがマージコミットで散らかる。

Git Rebase

git checkout feature-branch
git rebase main

これは feature ブランチのコミットを main の先頭から始まるように移動します。

長所: クリーンで直線的な履歴。git loggit bisect が読みやすくなる。 短所: コミットハッシュを書き換える。共有ブランチでは危険。

黄金律

共有ブランチに push 済みのコミットを rebase してはいけません。 他のメンバーがそれらのコミットをベースに作業している場合、rebase により全員が書き換えられた履歴を整合させなければならなくなります。

チーム戦略

戦略 ワークフロー
Merge のみ 常に merge。シンプルで安全、すべての履歴を保持。
Rebase + Merge feature ブランチを rebase してから、--no-ff で merge してマージコミットを作成。
Squash Merge merge 時に feature のすべてのコミットを1つにまとめる。

推奨ワークフロー

# feature ブランチを最新の main で更新
git checkout feature-branch
git rebase main

# トレーサビリティのためにマージコミット付きで main に merge
git checkout main
git merge --no-ff feature-branch

これにより、feature ブランチ内は直線的な履歴が得られ、main には明確なマージポイントが残ります。多くのチームにとって両方の良いところを取った方法です。

ユースケース

チームがブランチ戦略を議論し、rebase-then-merge に落ち着く場面で使用します。開発者はローカルで feature ブランチを rebase し、--no-ff で main に merge して明確なマージポイントを残します。

Try It — Git Command Builder

フルツールを開く