トラブルシューティング

git commit --amend の注意点

--amend は便利だが push 済みコミットの修正は危険。安全な使い方を解説

git commit --amend の注意点 diagram

--amend の基本

git commit --amend は直前のコミットを修正するコマンドです。

コミットメッセージの修正や、追加し忘れたファイルをコミットに含めるときに使います。

実際には「直前のコミットを置き換える新しいコミット」を作成するため、コミットハッシュが変わります。

bash
# コミットメッセージだけ修正
git commit --amend -m "正しいメッセージ"

# ファイルを追加してコミットに含める
git add forgotten-file.txt
git commit --amend --no-edit

push 前なら安全

まだ push していないコミットに対する --amend は安全です。

ローカルの履歴だけが変わるため、他の人に影響しません。

作業中に「コミットメッセージを間違えた」「ファイルを追加し忘れた」という場合は気軽に使えます。

push 後の --amend が危険な理由

push 済みのコミットを --amend すると、リモートとローカルの履歴が食い違います。

通常の push は拒否されるため、git push --force が必要になります。

しかし、他のメンバーが元のコミットを基に作業していた場合、force push により相手の履歴が壊れます。

共有ブランチでの force push はチーム開発における重大なトラブルの原因です。

bash
# push 済みコミットを amend すると...
git commit --amend -m "修正メッセージ"
git push
# error: failed to push (リモートと不一致)

# force push が必要になるが、これは危険
git push --force   # 他メンバーに影響する可能性あり

push 後の修正は revert を使う

push 済みのコミットを修正したい場合は、git revert で「取り消しコミット」を作成するのが安全です。

revert は履歴を書き換えず、新しいコミットとして変更を打ち消すため、他のメンバーに影響しません。

bash
# push 済みコミットを安全に取り消す
git revert HEAD

# 正しい内容でコミットし直す
git add .
git commit -m "正しい変更内容"
git push

関連コマンド