Emacs Magitで過去のcommit messageを書き換える

Emacsのgitクライアントであるmagitの操作を画像を使って解説。
ここではローカルレポジトリで過去に遡ったcommit messageの再編集をします。結果的にはgitコマンドのrebaseを使った書き換えと同じです。

magit1

画像は上のバッファでM-x magit-statusをしたところです。

magit2

magit statusバッファで"ll”(アルファベットlを2回)を押すと上のようなcommitのlogが表示されます。
ここで、commit message "commit 4” へカーソルを持って行き、”E”を押します。

magit3

commit message "commit 4”以降のcommitの予定を設定する画面になりました。 変更したいcommit messageの上で”r”を押してrewordのマークを付けます。

magit4

古い方から2つをpickからrewordに変えました。
ここでは他にも以下のようなマーキングが可能です。

  • c: pick (そのままcommit)
  • r: reword (commit messageのみ変更してcommit)
  • e: edit (amendしてcommit)
  • s: squash (直前のcommitに含める)
  • f: fixup (squashと同様、しかしこのcommitのログを破棄する)
  • x: exec (任意のコマンドを実行)

マーキングが完了したら”C-c C-c”で編集を開始します。(キャンセルしたい場合はmagit statusバッファで"R"に続き"A"を押すことでAbortできます)

magit5

古い方から順番にcommit messageを書き換えていきます。
“C-c C-c”で完了し、次のcommit messageの編集に移っていきます。

magit6

最後まで完了してcommitのlogを表示してみると編集が完了していることがわかります。