rebase
別名: git rebase / リベース / interactive rebase
git rebase は、あるブランチのコミットを別の基点(upstream)の上に付け替えてコミット履歴を線形に整えるコマンド。マージと違い履歴を書き換えるため、共有済みブランチでの実行には注意が必要。
公開:
定義
git rebase は、あるブランチのコミット列を別の基点(upstream)の上に付け替えるコマンドです。
マージが分岐したまま統合するのに対し、rebase はコミットを作り直して履歴を一直線に整えます。Git の履歴を読みやすく保つために使われます。
詳細
内部的には、upstream に無いコミットを一旦退避し、HEAD を upstream にリセットしてから、退避したコミットを 1 つずつ再適用します。git rebase -i(interactive)を使うと、コミットの並べ替え・統合(squash)・メッセージ修正ができます。
再適用の途中で衝突すると停止し、解消後に git rebase --continue で続行します。
よくある誤解
「rebase はマージの上位互換」ではありません。
履歴を書き換えるため、すでに push して共有したブランチを rebase すると、他人の履歴とコミット ID が食い違い、force push が必要になって事故のもとになります。
共有ブランチには merge、手元の整理に rebase が基本です。
関連
再適用中の衝突は Git rebase でコンフリクトが解消できない を参照。
履歴を進めるだけの fast-forward とは対照的な操作です。