git commitの統合

gitで過去のcommitを統合する方法。 直したつもりで直ってなかった時や、やむなく作業途中でcommitしたのを消した いときに便利。 これ使えばこないだの履歴消去は不要だった気がする…

git rebase -i HEAD~5

とするとエディタが開いて、こんな一覧が出てくる。

pick xxxxxxx 新機能追加!
pick xxxxxxx なんか動かないので修正
pick xxxxxxx やっぱり動かないのでもう一度修正
pick xxxxxxx 今度こそ修正完了!
pick xxxxxxx コメントにtypoがあったぞコラ

一番下が最新のcommitなので注意。 これを

pick xxxxxxx 新機能追加!
squash xxxxxxx なんか動かないので修正
squash xxxxxxx やっぱり動かないのでもう一度修正
squash xxxxxxx 今度こそ修正完了!
squash xxxxxxx コメントにtypoがあったぞコラ

に変更してエディタを終了すると、通常のcommitと同様に再度エディタが開くの で、何食わぬ顔で

新機能を追加
バグはありません!

とか書いてcommit完了すれば、悪戦苦闘した歴史は抹消される。素晴らしい。 なお、pickをeditにするとコメント書き換えになります。git commit –amendの過去バージョン?