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 -i
でcommit B
とcommit 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 B
とcommit D
のコミットメッセージを変更したいので、以下に示すように、変更したいコミットのpick
を r
または reword
に変更します(今回はr
に変更しています)。なお、文字を変更する際には、まずiキーを押してインサートモードに切り替えます。インサートモードでpick
をr
に変更したら 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 B
とcommit 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 B
とcommit 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 -i
とgit 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つ分のコミットを対象にリベースを開始します。
- コミットメッセージを変更する方法
pick
をr
またはreword
に変更することで、対象のコミットメッセージを変更することができます。
git log
コマンドでの確認git log --oneline
コマンドで、コミットメッセージが変更されているかを確認する。コミットメッセージが変更すると、新しいコミットハッシュ値が割り振られる。
お読み頂きありがとうございました。