【Git】push後にバグに気づいた!直前のコミットを綺麗に修正して上書きする方法

公開日: 2026年08月12日

「GitHub に push 完了!…と思ったらタイポやバグを発見してしまった😱」

そんなとき、fix: タイポ修正 のような細かいコミットを何個も増やしてコミット履歴を汚したくないですよね。

今回は、すでにリモート(GitHub等)に push してしまった直前のコミットに修正内容を合体させ、綺麗に履歴を上書きする方法 を解説します。


結論:実行するコマンド(3ステップ)

修正対象のファイルを編集・保存した後、以下の 3 つのコマンドを順に実行するだけです。

# 1. 修正したファイルをステージングに追加
git add <修正したファイル名>

# 2. 直前のコミットに修正を取り込む(コミットメッセージはそのまま維持)
git commit --amend --no-edit

# 3. リモートリポジトリに安全に上書き push する
git push --force-with-lease origin <ブランチ名>

※ ブランチ名が mainmaster の場合は、末尾を origin mainorigin master に置き換えてください。


各コマンドの詳しい解説

1. git add <ファイル名>

普段通り、バグ修正したファイルをステージングエリア(コミット対象)に追加します。全ファイルを対象にするなら git add . でも構いません。

2. git commit --amend --no-edit

  • --amend: 「直前のコミットを修正(やり直し)する」オプションです。新しいコミットを作らず、前回のコミットに今回の差分を吸収・合体させます。
  • --no-edit: 前回のコミットメッセージをそのまま再利用します(エディタを開かずに即座に完了します)。

    💡 コミットメッセージも一緒に修正したい場合は、--no-edit を外して git commit --amend を実行してください。

3. git push --force-with-lease origin <ブランチ名>

ローカルのコミット履歴を書き換えたため、通常の git push では「リモートと履歴が競合している」として拒否(non-fast-forward エラー)されます。そのため強制 push が必要になります。

ここで重要なのが、-f--force)ではなく --force-with-lease を使うこと です。

なぜ --force-with-lease を使うのか?

  • git push -f (危険): リモートに誰かが新しく push していたとしても、無条件で上書きして消し去ってしまいます。
  • git push --force-with-lease (安全): 「自分が最後に取得したリモートの状態から誰も push していない場合のみ」強制 push を許可します。他の人の作業を誤って消してしまう事故を防げるため、実務でも推奨されているオプションです。

⚠️ 注意点:使っていい場面・避けるべき場面

  • 使ってOKな場面:
    • 個人開発のリポジトリ
    • 自分だけが作業している feature ブランチ(PR 作成前など)
  • 避けるべき場面:
    • チーム全員で共有しているブランチ(main, develop など、他の開発者がすでに pull している可能性がある場合)
    • ※ 他の開発者のローカル環境と履歴の不整合が起きるため、共有ブランチでは新しいコミット(fix: xxx)として push するのがマナーです。

まとめ

  1. 修正して git add .
  2. git commit --amend --no-edit で直前コミットに合体
  3. git push --force-with-lease origin <branch> で安全に上書き

この手順を覚えておけば、うっかりミスを見つけた時でもスマートにコミット履歴を整えられます!