Git Interactive Rebase: コミット履歴を書き換える

git interactive rebase でコミットの並べ替え、編集、squash、削除、メッセージ書き換えを行う方法を解説。ブランチ履歴を整理する究極のツールです。

git rebase -i HEAD~5

詳細な説明

Interactive Rebase とは?

git rebase -i(インタラクティブ)はエディタを開き、最近のコミットを表示して、並べ替え、編集、squash、削除、メッセージの書き換えで履歴を書き換えることができます。merge 前にブランチを整理する最も柔軟なツールです。

Interactive Rebase を開始する

# 直近5つのコミットを rebase
git rebase -i HEAD~5

# 特定のコミットから rebase
git rebase -i abc1234

指示シート

エディタに以下が表示されます:

pick a1b2c3d Add user model
pick f4e5d6a Add user controller
pick 7g8h9i0 Fix typo
pick j1k2l3m Add user tests
pick n4o5p6q Update README

利用可能なコマンド

コマンド 短縮形 効果
pick p コミットをそのまま保持
reword r コミットを保持し、メッセージを編集
edit e コミットの修正のため一時停止
squash s 前のコミットに統合、メッセージを結合
fixup f 前のコミットに統合、メッセージは破棄
drop d コミットを完全に削除

例: PR 前のクリーンアップ

pick a1b2c3d Add user model
squash f4e5d6a Add user controller
fixup 7g8h9i0 Fix typo
pick j1k2l3m Add user tests
drop n4o5p6q Update README

これは最初の3つのコミットを統合し、テストコミットは分けたまま保持し、README の更新を削除します。

コミットの並べ替え

エディタ内で行を並べ替えるだけです。Git は新しい順序でコミットを再適用します。

コンフリクトへの対処

並べ替えや squash でコンフリクトが発生した場合、Git は一時停止して解決を促し、git rebase --continue で続行します。

安全性

interactive rebase はコミットハッシュを書き換えます。未 push のコミット、または自分が唯一のコントリビューターである feature ブランチでのみ使用してください。push 済みのブランチを更新する場合は、その後に git push --force-with-lease を使いましょう。

ユースケース

プルリクエストを開く前に、開発者が interactive rebase を使って修正コミットの squash、不明瞭なメッセージの書き換え、不要になった実験的なコミットの削除を行う場面で使用します。

Try It — Git Command Builder

フルツールを開く