Git Rebase で別のブランチに変更を適用する
git rebase を使ってブランチのコミットを別のブランチの先頭に再適用する方法を解説。クリーンで直線的なプロジェクト履歴を維持するための必須テクニックです。
git rebase main詳細な説明
git rebase main は何をするのか?
git rebase コマンドは、現在のブランチのコミットを別のブランチ(この場合は main)の先頭に再適用します。merge がマージコミットを作成するのとは異なり、rebase は履歴を書き換えて直線的なコミット列を生成します。
仕組み
- Git が現在のブランチと
mainの共通祖先を特定する。 - Git が現在のブランチ固有のコミットを一時的に退避する。
- Git がブランチポインタを
mainの先頭まで早送り(fast-forward)する。 - Git が退避していたコミットを、更新されたベースの上に一つずつ再適用する。
具体的な手順
# feature ブランチに切り替える
git checkout feature/login
# 最新の main に rebase する
git rebase main
コンフリクトが発生した場合、Git は一時停止して解決を促します。解決後に git rebase --continue で続行するか、git rebase --abort で操作全体をキャンセルできます。
Rebase を使うべきタイミング
- プルリクエストを開く前 — rebase により、ブランチが最新の
mainの上にクリーンに適用され、不要なマージコミットを回避できます。 - 履歴を直線的に保ちたいとき — きれいな
git logを好むチームでは、上流の変更を取り込む際に merge ではなく rebase を使います。
重要な注意点
共有ブランチに既に push されたコミットを rebase してはいけません。rebase はコミットハッシュを書き換えるため、共同作業者は発散した履歴を整合させなければならなくなります。push 済みのブランチを更新する必要がある場合は、--force ではなく git push --force-with-lease を使うと安全です。
rebase は Git で最も強力なツールの一つですが、規律が求められます。正しく使えば、読みやすく、bisect しやすく、revert しやすいプロジェクト履歴が得られます。
ユースケース
開発者がプルリクエストを開く前に、feature ブランチを最新の main の変更で更新し、コミット履歴を直線的に保ちたい場合に使用します。