Git Commit --amend
最終更新
git commit --amend は直前のコミットを新しいものに置き換え、メッセージを修正したり、ステージし忘れたファイルを追加したりできます。2つ目のコミットを追加するのではなく、直前のコミットを書き換えます。これによりコミットのハッシュが変わるため、まだ push していないコミットだけを amend してください。
これらをターミナルプレイグラウンドで試してみましょう。ブラウザ内の本物のシェルで、インストール不要です。
構文
| Command | What it does |
|---|---|
git commit --amend | 直前のコミットとそのメッセージを編集する |
git commit --amend -m "new message" | 直前のコミットのメッセージをその場で変更する |
git commit --amend --no-edit | ステージ済みファイルを追加し、メッセージはそのまま保つ |
よくあるケース
| Goal | Command |
|---|---|
| 直前のメッセージのタイプミスを修正する | git commit --amend -m "fixed message" |
| 忘れたファイルを直前のコミットに追加する | git add file の後に git commit --amend --no-edit |
| すでに push 済みのコミットを amend する(注意) | amend してから git push --force-with-lease |
Git commit --amend のよくある質問
直前のコミットメッセージを変更するには?
その場で置き換えるには
git commit --amend -m "new message" を実行し、エディタを開いて書き直すには git commit --amend を実行します。これは直前のコミットを新しいメッセージで書き換えます。すでに push 済みのコミットには、force push する覚悟がない限り行わないでください。忘れたファイルを直前のコミットに追加するには?
git add <file> でファイルをステージしてから、git commit --amend --no-edit を実行します。--no-edit フラグは既存のコミットメッセージを保ち、新しくステージした変更を直前のコミットにまとめるだけです。git commit --amend は新しいコミットを作成しますか?
いいえ。コミットを追加するのではなく、直前のコミットを置き換えます。結果は1つのコミットに見えますが、技術的には新しいハッシュを持つ新しいコミットが古いものの位置を取ります。共有された履歴を amend するには force push が必要になるのはそのためです。
push 済みのコミットを amend しても安全ですか?
注意が必要です。amend はコミットを書き換えるため、push 後には
git push --force-with-lease が必要になり、元のコミットをすでに pull した人に影響を与えかねません。共有ブランチでは amend よりも新しいコミットや git revert を選びましょう。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで
git commit --amend を実行できます。インストール不要です。Coddy の無料インタラクティブ Git コースでも、コミットの修正を段階的に扱っています。