1. 導入:なぜこのテクニックが必要なのか
Gitで開発をしていると、プルリクエスト(PR)のレビュー指摘を受けて修正を行う機会が頻繁にあります。その際、修正のたびに「修正」や「タイポ修正」といったコミットを重ねてしまい、履歴が汚れてしまった経験はありませんか?
今回紹介する git commit –fixup は、これらの修正コミットを、後で自動的に元のコミットに統合(スカッシュ)することを前提に作成する機能です。これにより、PRの履歴を整理された状態に保ち、レビュアーにとっても追いやすい綺麗なコミットログを実現できます。
2. 基礎知識:fixup! とは何か
git commit –fixup <ハッシュ値> を実行すると、指定したコミットのコミットメッセージの先頭に「fixup! 」という文字列が付与された新しいコミットが作成されます。
この「fixup! 」というプレフィックスが付いているコミットは、後の git rebase -i –autosquash コマンドを実行した際に、対象のコミット直下に自動的に配置され、統合対象としてマークされます。手動でrebase画面を操作してコミットを入れ替える手間が省けるため、非常に効率的です。
3. 実装/解決策:具体的な手順
開発フローは以下のステップで行います。
1. 直したいコミットのハッシュ値(または短縮ハッシュ)を確認します。
2. git commit –fixup <ハッシュ値> を実行し、修正コミットを作成します。
3. すべての指摘対応が終わったら、git rebase -i –autosquash <対象の範囲> を実行します。
4. エディタが開きますが、すでに自動で順序が整理されているため、そのまま保存して終了すれば統合完了です。
4. サンプルプログラム:実践コマンド例
以下は、実際の開発現場でのコマンド操作例です。
1. 修正したい過去のコミットハッシュを確認
git log –oneline
2. ハッシュ値(例: a1b2c3d)に対して修正コミットを作成
これによりメッセージが “fixup! 元のコミットメッセージ” になります
git commit –fixup a1b2c3d
3. 履歴を整理するためにrebaseを実行
–autosquashオプションにより、fixup!コミットが自動的に対象の下へ移動されます
git rebase -i –autosquash HEAD~5
4. エディタが開いたら、内容を確認してそのまま保存して閉じるだけです
これでコミットの統合が完了します
5. 応用・注意点
注意点:
git commit –fixup を使用して作成したコミットは、あくまで「統合されること」を前提としています。そのため、まだプッシュしていないローカルの履歴に対して行うのが基本です。もし共有済みのブランチでこれを行うと、履歴を改変(rebase)することになるため、チーム開発のルールを確認してから実行してください。
コツ:
もしコミットハッシュを調べるのが面倒な場合は、git commit –fixup HEAD~1 のように相対指定も可能です。また、現在の作業内容を「直前のコミット」に統合したい場合は、git commit –amend –no-edit と使い分けることで、より柔軟な履歴管理が可能になります。ぜひ日々の開発に取り入れてみてください。

コメント