導入:なぜ履歴の整理が必要なのか
開発中に試行錯誤を繰り返すと、「修正」「typo修正」「さらなる修正」といった細かいコミットが積み重なってしまうことはありませんか?汚れた履歴はプロジェクトの可読性を下げ、レビュアーの負担を大幅に増やします。git rebase -i (Interactive Rebase) を使いこなせば、これらの履歴を論理的で分かりやすい形に再構成できます。これは単なる見た目の問題ではなく、変更の意図を明確にするための「プロの作法」です。
基礎知識:Interactive Rebaseとは
Interactive Rebaseは、過去のコミット履歴を「対話的」に編集できる強力な機能です。主に以下の操作で使われます。
・squash: 複数のコミットを1つに統合し、メッセージを編集する。
・fixup: 複数のコミットを1つに統合し、メッセージを破棄する(細かい修正の統合に便利)。
・reword: コミットメッセージだけを書き換える。
・drop: 不要なコミットを削除する。
実装:具体的な手順
開発ブランチで直近の3つのコミットを整理したい場合、ターミナルで以下のコマンドを実行します。
サンプルプログラム:履歴整理のステップ
1. ターミナルで以下を実行します。
git rebase -i HEAD~3
2. エディタが開くので、以下のように書き換えて保存します。
変更前
pick a1b2c3d 実装を追加
pick e4f5g6h typo修正
pick i7j8k9l ログ出力の追加
変更後(fixupを使って、typo修正とログ追加を最初のコミットに統合)
pick a1b2c3d 実装を追加
fixup e4f5g6h
fixup i7j8k9l
保存してエディタを閉じると、自動的にコミットが統合されます。
応用・注意点:現場での落とし穴
Interactive Rebaseは「歴史の改変」を行う操作です。以下の点に注意してください。
・共有ブランチで行わない: すでにGitHubなどのリモートリポジトリにプッシュし、他人が作業しているブランチに対してrebaseを行うと、相手の作業環境と履歴が乖離し、混乱を招きます。必ず「自分しか触っていないブランチ」で行ってください。
・コンフリクトの解決: コミットを統合する過程で、コードの重複によるコンフリクトが発生することがあります。その場合は落ち着いてコードを修正し、git add . をしてから git rebase –continue を実行すれば再開できます。
・自信がない時はバックアップを: 操作に不安がある場合は、作業前に git branch backup-branch などと別ブランチを切っておけば、いつでも元に戻せるので安心です。
履歴を綺麗に保つことは、未来の自分やチームメンバーへの最大のギフトです。ぜひ今日から積極的に取り入れてみてください。

コメント