ユースケース
過去のコミットへrebaseして混ぜ込みたいコミットがある(例えばtypo、軽微なバグ修正など)。
しかし今すぐにはしたくない(他の人とブランチ状態を共有している、レビュー中は修正したという経緯も残しておきたい、rebaseはプルリクをマージする直前にのみ行いたいなど)。
が、"Fix typo"など適当に書き残すとどのコミットへ混ぜ込むのか忘れてしまうのが辛い。
ソリューション
gitのそれ向きの機能を使う。
1. rebaseして混ぜ込みたいコミットを作成するとき、以下のようにコマンドを実行する
git commit --fixup ${混ぜ込み対象のコミットのSHA}
// または
git commit --fixup :/${混ぜ込み対象のコミットのメッセージに含まれるキーワード}
// ↑ 複数のコミットが該当する場合は直近のものが優先される
// fixupじゃなくてsquashしたいときはこう
git commit --squash ${混ぜ込み対象のコミットのSHA}
2. rebaseするときに--interactive --autosquash
オプションをつける
git rebase --interactive --autosquash master
すると、interactiveモードの初期状態が通常と変わる。
具体的には1で作成したコミットが混ぜ込みたいコミットの直後に移動して、かつ行の先頭のモード指定がpickからfixupへ変更される。
※ 現状では--interactiveなしに--autosquashは使用できないようなので注意
おまけ
以下でautosquashオプションをデフォルト有効にできる
git config --global rebase.autosquash true