git rebase -iでnつ前のコミットメッセージを変更する方法を解説!

git rebase -i(インタラクティブモード)を利用すると、コミット履歴をきれいに整理できます。例えば、複数のコミットをまとめたり、コミットの順序を変更したり、過去のコミットメッセージを変更したりすることができます。

この記事ではgit rebase -iコミットメッセージを変更する方法についてわかりやすく解説します。

git rebase -iでコミットメッセージを変更する方法

まず、次のようなコミット履歴があるとします。

$ git log --oneline --reverse
...(略)
9a2192c commit A
fb06608 commit B
4654ff6 commit C
4d49f85 (HEAD -> main) commit D

今回は、git rebase -icommit Bcommit Dのコミットメッセージを変更してみましょう。

手順を以下に示します。

コミットメッセージを変更する手順

  • git rebase -iコマンドを実行する
  • テキストエディタでコミットを編集する
  • コミットメッセージを変更する

では上記の手順について順番に説明します。

git rebase -iコマンドを実行する

まず、変更したいコミットが含まれる範囲を指定して、git rebase -i(または、git rebase --interactive)コマンドを実行します。例えば、最新の4つのコミットのメッセージを変更したい場合は、以下のように実行します。

git rebase -i HEAD~~~~
#以下のコマンドでも可能
git rebase --interactive HEAD~~~~
git rebase -i HEAD~4
git rebase --interactive HEAD~4

上記のコマンドはHEADから4つ分のコミットを対象にリベースを開始するコマンドです。

テキストエディタでコミットを編集する

git rebase -iコマンドを実行すると、設定されているテキストエディタが開き、HEADから4つ分のコミットが表示されます(デフォルトではvimが開きますが、設定によっては他のエディタが開くこともあります)。

pick 9a2192c commit A
pick fb06608 commit B
pick 4654ff6 commit C
pick 4d49f85 commit D

# Rebase 634dc6c..4d49f85 onto 634dc6c (4 commands)
(以下略)

今回は、commit Bcommit Dのコミットメッセージを変更したいので、以下に示すように、変更したいコミットのpick を r または reword に変更します(今回はrに変更しています)。なお、文字を変更する際には、まずiキーを押してインサートモードに切り替えます。インサートモードでpickrに変更したら  escキーでインサートモードを終了し、:wqを入力した後、Enterキーを押してテキストエディタを閉じます。

pick 9a2192c commit A
r fb06608 commit B
pick 4654ff6 commit C
r 4d49f85 commit D

# Rebase 634dc6c..4d49f85 onto 634dc6c (4 commands)
(以下略)

コミットメッセージを変更する

先ほどの手順でEnterキーを押すと、以下に示すように、rewordを指定したコミットのコミットメッセージを編集するテキストエディタが開きます。

commit B

# Please enter the commit message for your changes. Lines starting
(以下略)

iキーを押してインサートモードに切り替え、必要に応じて、コミットメッセージを変更しましょう。今回は、以下に示すように残したいコミットのコミットメッセージをcommit BからNew commit Bに変更しました。

New commit B

# Please enter the commit message for your changes. Lines starting
(以下略)

コミットメッセージの変更が終わったら、escキーでインサートモードを終了し、:wqを入力した後、Enterキーを押しましょう。

Enterキーを押すと、再度コミットメッセージを編集するテキストエディタが開きます。

commit Bcommit Dのコミットメッセージを変更するので、コミットメッセージを変更するテキストエディタが2回開きます。commit Bのコミットメッセージのみを変更する場合、テキストエディタは1回しか開きません。

commit D

# Please enter the commit message for your changes. Lines starting
(以下略)

同様に、コミットメッセージを変更します。今回は、以下に示すように残したいコミットのコミットメッセージをcommit DからNew commit Dに変更しました。

New commit D

# Please enter the commit message for your changes. Lines starting
(以下略)

これでcommit Bcommit Dのコミットメッセージを変更することができました。

では次に、git logコマンドを用いて、実際にコミットメッセージが変更されているかを確認してみましょう。

git logコマンドでコミットメッセージが変更されているかを確認する

git logコマンドを実行してコミットがまとまっているかを確認してみましょう。

$ git log --oneline --reverse
...(略)
9a2192c commit A
dc0b46e New commit B                 # ← コミットのハッシュ値(dc0b46e...)は新たな値が割り振られている
53b646d commit C                     # ← コミットのハッシュ値(53b646d...)は新たな値が割り振られている
5db372e (HEAD -> main) New commit D  # ← コミットのハッシュ値(5db372e...)は新たな値が割り振られている

上記コマンドの実行結果を見ると、コミットメッセージが変更されていることが分かります。なお、コミットメッセージを変更したcommit B以降ではコミットのハッシュ値は新たな値が割り振られます。

git rebase -iとgit commit --amendの違い

git rebase -igit commit --amendコマンドを用いると、コミットメッセージを変更することができます。ではこれらのコマンドの違いは何でしょうか?以下では、それらの違いを説明します。

  • git rebase -i
    • 複数の過去のコミットメッセージを変更することができる。
    • 過去の複数のコミットを変更したい場合には、git rebase -iが適している。
    • コミットメッセージの変更だけでなく、コミットの順序変更や統合(squash)などもできる。
  • git commit --amend
    • 直前のコミットメッセージを変更することができる。
    • 直前のコミットメッセージだけを変更したい場合は、git commit --amendを使うのが簡単です。
    • コミットメッセージの変更だけでなく、コミットに新しい変更を追加したりできる。
    • git commit --amend -m "新しいコミットメッセージ"のように-mオプションを付けると、直前のコミットに対してコミットメッセージをエディタを開かずに即座に変更することができる。

本記事のまとめ

この記事ではgit rebase -iコミットメッセージを変更する方法について、以下の内容を説明しました。

  • git rebase -i コマンドの実行方法
    • git rebase -i HEAD~nコマンドで、HEADからnつ分のコミットを対象にリベースを開始します。
  • コミットメッセージを変更する方法
    • pickrまたはrewordに変更することで、対象のコミットメッセージを変更することができます。
  • git logコマンドでの確認
    • git log --onelineコマンドで、コミットメッセージが変更されているかを確認する。コミットメッセージが変更すると、新しいコミットハッシュ値が割り振られる。

お読み頂きありがとうございました。