Git

The git rebase command reapplies commits from the current branch onto another base tip, helping create a cleaner, more linear history when used appropriately.

git rebase

Git の git rebase コマンドは、ブランチの履歴を整理するために使われる強力なツールです。

git rebaseの基本的な概念
git rebase は、現在のブランチにあるコミットを、指定したブランチやコミットの先端を新しい土台として順番に再適用し、履歴を作り直す操作です。通常はマージコミットを増やさず、直線的な履歴に整理しやすくなります。
git rebaseの主な用途
履歴のクリーンアップ
開発中にコミットした小さな変更や、冗長なコミットメッセージを整理するために使います。
ブランチの最新化
他のブランチでの変更を取り込み、自分のブランチを最新の状態にするために使います。
git rebaseの種類
インタラクティブリベース (git rebase -i)
コミットを再構成する際に、どのコミットを残し、どのコミットをスカッシュ(まとめる)するか、どのコミットを修正するかを指定できます。
非インタラクティブリベース
git rebase main のように、編集画面を開かず、現在のブランチの対象コミットを指定した土台の上へ順番に再適用します。
git rebaseの基本的な使い方
基本的なリベース

Git Bash

git switch feature-branch
git rebase main
feature-branch にあるコミットを、ローカルの main の先端を新しい土台として再適用します。リモートの最新状態に直接合わせたい場合は、先に git fetch originorigin/main を更新し、git rebase origin/main のようにリモート追跡ブランチを指定します。
インタラクティブリベース

Git Bash

git switch feature-branch
git rebase -i main
インタラクティブモードでリベースを実行し、履歴を編集します。

インタラクティブリベースの操作例

git rebase -i は、複数のコミットを編集、並び替え、統合、削除するためのインタラクティブリベースです。コミット履歴を整理したり、コミットメッセージを修正したりできます。

git rebase -i を実行すると、次のような編集画面が表示されます。

rebase todo

pick e5f6d3a First commit
pick a3c7e8b Second commit
pick 3b9d2b9 Third commit

この画面で、各コミットに対して以下のような操作が可能です。

git rebaseの注意点

公開済みブランチをリベースする場合
他の開発者がすでに利用している公開済みコミットをリベースすると、既存のコミットとは別の新しいコミットとして履歴が作り直されます。そのため、共同作業者の履歴と食い違い、再取得や再リベースが必要になることがあります。一般的には、他の人が作業の土台にしている公開済みブランチのリベースは避けます。
コンフリクトの解決
リベース中にコンフリクトが発生した場合は、対象ファイルを手動で修正し、git add ファイル名 で解決済みとして記録してから、git rebase --continue で続行します。中止したい場合は git rebase --abort、そのコミットを飛ばす場合は git rebase --skip を使います。
リベース後の push
リベースで push 済みのコミットを書き換えた場合はコミットIDが変わるため、すでにリモートへ push 済みのブランチでは通常の git push が拒否されることがあります。必要な場合でも、単純な --force ではなく --force-with-lease を検討し、チーム内で共有してから実行します。