gitのコミットの歴史を改変する(git rebase) 2 / 2
git rebase パート1の続きです。
fixed(コメントは変更せずにコミットをまとめる)
fixed は squash と同じく1つ前のコミットとまとめる機能がありますが squash と違うのはコメントはそのままにするということです。
squash と同じ説明になりますが 70b3379 の メソッド名のタイポ修正 を何事もなかったかのようにしたい時は cce19c9 とまとめてしまいます。いつものように
1
| |
こうして
1 2 3 | |
とします。すると squash の場合はこの後にコメントを入力する画面が出て来ましたが fixed の場合はそれが出ません。まとめる先のコミットのコメントがそのまま使われますので rebase の作業はこれで終了です。 squash の時と同じように、タイポの歴史はなかったことになりました。
exec
exec はコミットに指定するものではありません。
1
| |
とすると
1 2 3 | |
と出ますが、例えば
1 2 3 4 5 6 | |
という風にコミットとは別の行に exec を入れこんで、その後にコマンド名を記述します。この例では各コミットの後に make test というコマンドを実行してくれます。
コミットの順番を入れ替える・削除する
rebase はコミットの順番を入れ替えることもできます。
1
| |
とすると
1 2 3 4 5 | |
と出ますが、こんな風にコミットの順番を入れ替えたり削除したりすることができます。
1 2 3 4 | |
まとめ
rebase はコミットの歴史を書き換えることができます。すなわち適当にコミットしていても、リモートリポジトリに push 前であれば rebase して、コミット履歴を綺麗に保つことができます。rebase するとコミットハッシュが変わるので、リモートに push するには -f をつけて強制的に push しないといけません。
最初は実行するのがちょっと怖いですが、慣れてしまえば全然問題ありません。もし失敗したとしても git reflog などを使って過去のコミット具を参照して rebase する前のコミットを参照して元に戻したりできます。
なくても困らない rebase ですが、覚えているとなにかと便利なのでまずは練習用リポジトリでも作ってやってみてもどうでしょうか。