Gitでコミットメッセージを修正する方法!amendの使い方も解説

git
\ Gitがよく分からない初心者の方へ /
さわっておぼえるGit入門
Gitがよく分からない初心者でも、
この1冊で基本操作を一通り理解できます。
👉 Amazonで詳しく見る
Kindle Unlimitedなら無料で読めます
▶ 無料で読む(Kindle Unlimited)

今回は、Gitでコミットメッセージを修正する方法について解説します。
Gitを使っていると、次のような経験はありませんか?

  • コミットメッセージの誤字を修正したい
  • コミット後に説明を追記したい
  • git commit --amend の使い方が分からない

このような場合は、Gitの git commit --amend コマンドを使うことで、最新のコミットメッセージを簡単に修正できます。
コミットメッセージの修正はプッシュする前に行いましょう。

この記事では、コミットメッセージを変更する方法から、push後に修正する場合の注意点まで解説します。

git commit –amendとは?

git commit --amendは、直前のコミット内容を修正するためのコマンドです。
主な用途は次のとおりです。

  • コミットメッセージの修正
  • コミット漏れファイルの追加
  • コミット内容の微修正

例えば次のような履歴があったとします。

git log --oneline
a1b2c3d fix login bug
e4f5g6h add user page

この状態で git commit --amend を実行すると、一番上のコミット(最新コミット)が書き換えられます。
ステージエリアに変更したファイルを置いておき、コマンドを実行すると、ファイルの内容も最新コミットに追加・変更されます。

このため、git resetコマンドを使うことなく、最新コミットの内容とコミットメッセージを書き換えられます。
コミットメッセージはコマンド実行時に入力します。

⚠️ 注意:コミットは「書き換え」ではなく「差し替え」

このコマンドを実行すると、元のコミットが上書きされるように見えますが、内部的には「元のコミットを捨てて、新しくコミットを作り直して差し替える」という動きをしています。そのため、修正前と修正後で**コミットID(ハッシュ値)が変わるという特徴があります。
これが、のちに解説する「push後に使うと危険」と言われる理由に繋がります。

Gitでコミットメッセージを修正する方法

直前のコミットメッセージを修正する場合は、以下のコマンドを実行します。

git commit --amend -m "修正後のコミットメッセージ"

例えば、誤って以下のコミットを作成したとします。

git commit -m "fxi login bug"

後から修正したい場合は次のように実行します。

git commit --amend -m "fix login bug"

これで直前のコミットメッセージのみが変更されます。

エディタでコミットメッセージを編集する方法

長いコミットメッセージの場合はエディタを開いて編集することもできます。

git commit --amend

実行するとGitに設定されたエディタが起動します。
例えば次のような内容が表示されます。

fix login bug

# Please enter the commit message...

メッセージを書き換えて保存し、終了すると修正が反映されます。
このコマンドは、ファイルの内容も更新・追加することが可能です。

コミットメッセージを修正したか確認する方法

コミットメッセージを確認するにはgit logコマンドを使います。
pushする前に修正後は履歴を確認しましょう。

1件だけ確認する

amendで変更した最新のコミットだけを確認するには、下記のコマンドを実行します。

git log -1

表示例

commit b7c8d9e...
Author: user

fix login validation error

一覧で確認する

コミットメッセージとコミットIDのみを一覧で表示するには、下記のコマンドを使います。

git log --oneline

表示例

b7c8d9e fix login validation error
e4f5g6h add user page

変更したメッセージになっていれば成功です。

push前なら安全に修正できる

まだリモートリポジトリへpushしていないコミットであれば、自由に修正できます。

git commit --amend -m "fix login validation error"

その後、通常通りpushします。

git push origin main

個人開発や作業中のブランチではよく利用される方法です。

プッシュした後は、他のユーザーから取得される可能性があるため、履歴が変更ができない場合もあります。
プッシュ前にしっかりと修正・確認し、プッシュするようにしましょう。

push後のコミットメッセージを修正する方法

すでにGitHubへpush済みの場合は少し注意が必要です。
例えば以下のように修正します。

git commit --amend -m "fix login validation error"

その後、通常のpushは失敗します。

git push origin main
! [rejected] main -> main (non-fast-forward)

これはコミット履歴が変更されたためです。
その場合は強制的に履歴を更新することができます。

git push --force-with-lease origin main

他のユーザーがプッシュする前なら--force-with-leaseが効きますが、既にプッシュされていたらプッシュできません。
--force-with-leaseを使うことで、他の人がすでに別のコミットをpushしていた場合、不意にそれを上書き消去してしまうのを防ぐためにエラー(拒否)にしてくれます。

push後にamendを使う際の注意点

git commit --amendは、上記で解説したように最新のコミット履歴を書き換えるコマンドです。
そのため、共有ブランチで使用すると他の開発者に影響を与える可能性があります。

最新コミットを書き換えてプッシュする前に、他のユーザーが取得してしまったような場合です。
注意すべきケースは以下のとおりです。

  • チーム開発中のmainブランチ
  • 他の人が取得済みのコミット
  • 共同作業中のfeatureブランチ

このような場合は、再度コミットしなおすなど、履歴を書き換えない方法を検討しましょう。

過去のコミットメッセージを修正する方法

直前ではなく過去のコミットを修正したい場合は、インタラクティブリベースを利用します。
例えば3件前まで編集する場合です。

git rebase -i HEAD~3

以下のような画面が表示されます。

pick a1b2c3d first commit
pick b2c3d4e second commit
pick c3d4e5f third commit

修正したいコミットをrewordに変更して保存・終了します。

pick a1b2c3d first commit
reword b2c3d4e second commit
pick c3d4e5f third commit

保存すると、自動的に新しいコミットメッセージを入力する画面が起動します。
そこでメッセージを修正して、再度保存・終了すれば完了です。

この方法も、既にプッシュしている場合は他のユーザーに影響が出るため使わないようにしましょう。
ひとりで使っているリポジトリであれば、修正した後に強制プッシュ(git push -f)しても良いかと思います。

まとめ

Gitで最新のコミットメッセージを修正する場合は、git commit --amend を利用しました。
基本的な使い方は次のとおりです。

git commit --amend -m "新しいコミットメッセージ"

ポイントをまとめると以下のとおりです。

  • 直前のコミットメッセージは git commit --amend で修正できる
  • エディタを開いて編集することも可能
  • push前なら安全に変更できる
  • push後は git push --force-with-lease が必要になる場合がある
  • 過去のコミットは git rebase -i で修正できる

コミットメッセージのミスはよくあるため、git commit --amend の使い方を覚えておくとスムーズにGitを運用できます。

コメント