Git: commit --fixup + rebase --autosquash で修正を正しいコミットに自動で混ぜる
過去のコミットへの追加修正を git commit --fixup=<sha> で作っておき、git rebase -i --autosquash すると、修正コミットが対象コミットの直後に自動で並び、squash される。
どんな時に使う?
- PRレビューで「3つ前のコミットの typo を直して」と言われたとき
- 履歴をきれいに保ちたいが、rebase -i で手作業の並べ替えをしたくないとき
手順
bash
# 修正をステージしてから、対象コミットを指定して fixup コミットを作る
git add -p
git commit --fixup=abc1234
# ベースから autosquash 付きで rebase(エディタは並び済みなので保存するだけ)
git rebase -i --autosquash main- 毎回付けるのが面倒なら:
git config --global rebase.autoSquash true - メッセージも直したいときは
--fixup=reword:<sha>、内容とメッセージ両方なら--fixup=amend:<sha>(Git 2.32+)
新しい選択肢: git history fixup / git history reword
git history fixup / git history reword- 最近の Git には、rebase を使わずに過去のコミットへ修正を混ぜる
git history fixup <commit>、メッセージだけを直すgit history reword <commit>が入った(@zaru · 2026-06-30)。 - 新しい(実験的な扱いの)コマンドなので、手元の Git で
git history -hが使えるか確認してから使う。
注意点
- 履歴を書き換えるので、push済みの共有ブランチでは force push が必要になる。自分専用のPRブランチで使う(
git push --force-with-lease推奨)。