はじめに
Gitのマイナス面として、SubVersionに比べてコミットログの編集がしにくいというのを耳にしたことがあります。コミットログをやり直したいと思う場面は意外と多いはずなので、確認したいと思います。
【case1】直前のコミットの修正
> git commit --amend
エディタで前のコミットログが開くので編集します。
もしくは直接コマンドにコメントを入れます。
> git commit --amend -m "新しいコメント"
簡単でしたね。
> git rebase -i HEAD~
次のパターンと同じrebase -i
を使った、こちらでも同じことができます。
> git reset --soft HEAD~
リセットを使ってコミット前に戻してしまう方法もあります。コミットしなおして完了です。
【case2】ふたつ前のコミットを修正
> git rebase -i HEAD~2
reword 5549b30 add d
pick 07af2cf del mistake
変更したいコミットログの行をpick
からreword
に変更します。保存すると、エディタに既存のコミットメッセージが表示されるので編集して保存します。(複数変更時は複数回繰り返す)
【case3】ひとつ前のコミットログを消す
意外とやりたい場面が多いのがこのパターン。いわゆる凡ミスの修正です。誤字修正、スペルミス、バージョン変更忘れ、コメント修正など・・・。修正自体は保持してコミットメッセージだけを消したい場合です。
> git rebase -i HEAD~2
pick 546f109 finish
squash 2cd5de3 del mistake
削除したいログdel mistake
の方をsquash
にします。既存のメッセージ内容がエディタが開きます。初期状態では両方のメッセージが含まれているので、del mistake
を削除してfihishだけ残して保存します。必要なければそのまま終了します。これでfinish
だけがログに残り、squash
した方のコミット内容もそこに含まれます。
まとめ
修正自体は簡単にできる桃の、新たにコミットを行って履歴を改変しているので影響範囲が気になるところ。とはいえGitを使っていく上で、こういった修正作業で作業が止まらないように準備しておきたいですね。