Git 対話的rebase完全ガイド|interactive rebaseでコミット整理・削除・修正をマスターしよう
旅行先で撮った写真をあとから整理すると、「この順番じゃ見づらいな」「いらない写真が混ざっているな」と感じることがあります。
Gitのコミット履歴もまったく同じです。 開発を進めていると、
- コミットメッセージを雑につけてしまった
- 細かくコミットしすぎて履歴が読みにくい
- 不要なテストコミットが混ざった
- 複数の修正を1つにまとめたい
そんな場面で活躍するのが対話的rebase(interactive rebase)です。
この記事では、Git初心者でも理解できるように、対話的rebaseの基本から実践的な使い方まで、旅先で友達に説明するような感覚でわかりやすく解説していきます。
対話的rebase(interactive rebase)とは
対話的rebaseとは、Gitのコミット履歴を後から整理・修正できる便利な機能です。 通常のrebaseが「自動的に履歴を組み替える機能」なのに対して、対話的rebaseはコミット単位で細かく編集できるのが特徴です。
Git開発を続けていると、こんな履歴になることがあります。
fix fix2 hello修正 最終調整 本当に最終
数日後に見返すと、何をしたコミットなのか自分でも分からなくなります。
対話的rebaseを使えば、 履歴を整理して読みやすく整えることができます。
対話的rebaseでできること
- コミット順序の変更
- 複数コミットの結合
- コミットメッセージ修正
- 不要コミット削除
- 途中コミットの編集
リリース前の最終整理やコードレビュー前には特に役立つ機能です。
対話的rebaseのメリット
1. コミット履歴が読みやすくなる
開発チームでは履歴そのものがドキュメントになります。 整理された履歴は、後からコードを追う人にとって大きな助けになります。
2. バグ調査がしやすくなる
「どの変更で問題が起きたか」を追いやすくなります。 履歴が整っているほど原因特定は速くなります。
3. コードレビューがスムーズ
レビュー担当者が変更内容を理解しやすくなります。 不要なノイズが減るため、レビュー効率も上がります。
Git 対話的rebaseの基本コマンド
まずは過去3つのコミットを編集してみます。
git rebase -i HEAD~3
「HEAD~3」は「現在から3コミット前までを対象にする」という意味です。
実行するとエディタが開き、対象コミットが表示されます。
pick 1a2345 履歴メッセージ差戻 pick 123a45 hello.txt変更 pick 12345b こんにちはを変更
ここで「pick」を変更することで、コミットに対して操作できます。
対話的rebaseで使う主要コマンド一覧
pick
そのままコミットを適用します。 何も変更しない場合に使用します。
pick 123abc 修正コミット
reword
コミットメッセージだけ変更します。 急いで作業して雑な名前を付けてしまった時に便利です。
reword 123abc fix
保存すると新しいコミットメッセージ入力画面が表示されます。
squash
複数コミットを1つにまとめます。 小さな修正を整理する時によく使います。
pick 111aaa API追加 squash 222bbb タイポ修正
結果として1つのコミットになります。
fixup
squashに似ていますが、コミットメッセージを破棄します。 細かい修正を吸収するときに便利です。
pick 111aaa API追加 fixup 222bbb typo修正
edit
コミット内容そのものを修正します。 途中コミットへ戻って変更を加えたい時に使用します。
drop
不要コミットを削除します。
drop 333ccc テストコミット
一度消した履歴は簡単には戻せません。 慎重に実行しましょう。
exec
任意のシェルコマンドを実行できます。 利用頻度は高くありませんが、自動テスト実行などに活用できます。
コミットメッセージを書き換える方法
例えば直近3件のコミットメッセージを修正したい場合。
git rebase -i HEAD~3
表示された画面で「pick」を「reword」に変更します。
pick 111aaa API追加 reword 222bbb fix pick 333ccc README修正
保存して閉じるとGitが新しいメッセージ入力を求めます。
最後に確認します。
git log
履歴が更新されていれば成功です。
コミットを整理する実践シナリオ
コードレビュー前の整理
レビュー前に細かい修正をまとめると、変更内容が伝わりやすくなります。
リリース前のクリーンアップ
旅の荷物整理と同じです。 不要なものを減らすほど、後で扱いやすくなります。
バグ修正履歴を見やすくする
未来の自分やチームメンバーを助けるためにも、履歴整理は重要です。
コンフリクトが発生した場合の対処法
対話的rebase中にコンフリクトが起きることがあります。 焦らなくても大丈夫です。
基本手順はこちら。
- コンフリクト箇所を修正
- 修正ファイルをステージング
- rebaseを続行
git add 修正したファイル名
git rebase --continue
途中でやめたい場合はこちら。
git rebase --abort
これで開始前の状態へ戻せます。
対話的rebase利用時の注意点
- 共有ブランチでは慎重に利用する
- push済み履歴を書き換える場合は影響範囲を確認する
- 削除コミットは元に戻しにくい
- 重要作業前はバックアップを取る
特にチーム開発では「履歴改変」が他メンバーへ影響するケースがあります。 利用前に状況を確認しましょう。
まとめ|対話的rebaseはGit履歴を整える強力な武器
対話的rebaseは単なる履歴編集機能ではありません。 未来の自分やチームを助けるための整理術でもあります。
覚えておきたいポイントを最後に整理します。
- reword:コミットメッセージ変更
- squash:コミット結合
- fixup:メッセージを捨てて統合
- edit:コミット内容編集
- drop:不要コミット削除
最初は少し怖く感じるかもしれません。 でも慣れてくると、散らかった履歴を整える作業が気持ちよく感じられるようになります。
旅行のあとに写真を整理するように、開発のあとにはコミット履歴も整える。 その習慣が、読みやすく美しいGit履歴につながります。
※リベース関連の操作は履歴を書き換えるため、実行前には十分注意してください。







0 件のコメント:
コメントを投稿