Git Amend: 直前のコミットを修正する
git commit --amend を使って直前のコミットメッセージの変更、ファイルの追加忘れの修正、最新コミットの内容を新規コミットなしで修正する方法を解説します。
git commit --amend -m "Updated commit message"詳細な説明
git commit --amend は何をするのか?
git commit --amend は直前のコミットを新しいコミットに置き換えます。コミットメッセージの変更、追加し忘れたファイルの補完、またはその両方が可能です。元のコミットは破棄され、新しいハッシュを持つ新しいコミットが代わりに作成されます。
コミットメッセージの変更
git commit --amend -m "Updated commit message"
-m を省略すると、前のメッセージが入力済みの状態でエディタが開きます。
追加し忘れたファイルを含める
# 忘れたファイルをステージ
git add src/utils/helpers.ts
# コミットに含めるよう amend する
git commit --amend --no-edit
--no-edit フラグは元のコミットメッセージを変更しません。
著者の変更
git commit --amend --author="Jane Doe <jane@example.com>"
内部的な仕組み
amend は実際にはコミットを「編集」しません。Git は更新された内容で全く新しいコミットオブジェクトを作成し、ブランチをそれに向けます。古いコミットは孤立状態になります(ガベージコレクションまで git reflog で復元可能)。
重要な注意点
共有ブランチに push 済みのコミットを amend してはいけません。 amend はコミットハッシュを変更するため、履歴の書き換えになります。自分の feature ブランチで push 済みコミットを amend する必要がある場合は、git push --force-with-lease で対応してください。
よくあるワークフロー
# コミットする
git commit -m "Add user authentication"
# ファイルを追加し忘れたことに気づく
git add src/middleware/auth.ts
git commit --amend --no-edit
# メッセージも更新したくなった
git commit --amend -m "Add user authentication middleware"
--amend は直前のコミットに対するクイック「やり直し」ボタンと考えてください。それより前のコミットを修正するには、interactive rebase を使いましょう。
ユースケース
開発者が直前のコミットにテストファイルを含め忘れたことに気づき、ファイルをステージしてから push 前にコミットを amend する場面で使用します。