Menu
Coddy logo textTech

Git Force Push

最終更新

ローカルブランチがリモートから分岐していると、通常の git push は拒否されます。Git はあなたが見ていないかもしれないコミットを上書きしないからです。force push はそのチェックを無視し、リモートブランチをローカルに一致させます。履歴を書き換えた後(rebase や amend)には必要ですが、他人のコミットを消してしまうことがあるため、より安全な --force-with-lease を選びましょう。

これらをターミナルプレイグラウンドで試しましょう - ブラウザ内の本物のシェルで、インストール不要です。

フォースプッシュはリモートブランチを書き換え済みのローカル履歴に合わせます。リモート側で分岐していたコミットは破棄されます。

構文

CommandWhat it does
git push --force安全チェックなしでリモートブランチを上書きする
git push -f--force の短縮形
git push --force-with-leaseその間に他の誰もプッシュしていない場合のみ強制する
git push --force-with-lease origin feature名前付きブランチへのより安全な force push

--force vs --force-with-lease

Behavior--force--force-with-lease
リモートを上書きする常に最後の fetch 以降に変更がない場合のみ
他人のコミットを消せるはい拒否する - ただし fetch で lease が更新された場合を除く
チームに推奨いいえはい

Git force push のよくある質問

いつ force push が必要ですか?
すでにリモートにある履歴を書き換えたときです - git rebasegit commit --amend、またはコミットを squash する対話的 rebase の後などです。ローカルブランチがもはやリモートの履歴と一致しないため、通常のプッシュは拒否され、force push だけが更新できます。
--force と --force-with-lease の違いは何ですか?
--force は無条件でリモートブランチを上書きするため、最後の fetch 以降にチームメイトがプッシュしたコミットを気づかぬうちに削除することがあります。--force-with-lease はリモートがあなたが最後に見たコミットのままである場合にのみ上書きします - その間に他の誰かがプッシュしていれば拒否し、その作業を保護します。1 つ注意点があります。あらゆる fetch(IDE のバックグラウンド自動 fetch を含む)が lease を更新するため、リモートを確認した直後にプッシュしてください。それでも共有ブランチでは --force より --force-with-lease を選びましょう。
force push は危険ですか?
危険な場合があります。共有ブランチでは、単純な --force が他人のプッシュしたコミットを上書きし、実質的にその作業をリモートから削除してしまうことがあります。自分だけが使うブランチでは安全です。迷ったら --force-with-lease を使いましょう。見ていない変更を潰す代わりに、安全に失敗します。
force push を元に戻すには?
古いコミットがまだローカルや git reflog に残っていれば、ブランチをそこへリセットして再度 force push すれば以前の状態を復元できます。これも --force-with-lease を使うべき理由の一つです - そもそも誤った上書きが起こる可能性を大幅に減らします。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで git push コマンドを実行できます - インストール不要です。Coddy の無料のインタラクティブな Git コースでも、リモートとの作業を段階的に扱います。
Coddy programming languages illustration

Coddy で Git を学ぼう

始める