迷ったら fixup、語りたいなら squash

fixupは前のコミットに混ぜ、メッセージは捨てる
fixupは前のコミットに混ぜ、メッセージは捨てる

git rebase -i で pick を fixup に書き換えるとき、すぐ下に squash という双子みたいな選択肢がある。どちらも「前のコミットに混ぜる」ところは同じ。違いはたった1つ、混ぜたあとのメッセージを捨てるのが fixup、書き直すのが squash だ。

迷ったときの目安はシンプルだ。「あ、さっきのコミットに入れ忘れた」「タイポを直しただけ」。履歴にわざわざ一行残すほどでもない小修正は fixup。いくつかのコミットを1つにまとめて、新しく名前を付け直したいときは squash。たとえば「WIP」のコミットたちが Add contact page の一部でしかないなら、メッセージごと吸い込む fixup がぴったりだ。

現場では、もう一段ラクをする裏技がある。直したいコミットを見つけたら、その場で対象を指定して git commit --fixup でコミットしておく。あとで git rebase -i --autosquash を走らせると、印のついたコミットが対象の真下に、しかも fixup 指定済みで自動的に並ぶ。todo を手で並べ替えなくていい。fixup に慣れたら、次はこれを試してほしい。整える手際が、ぐっと上がるはずだ。