【Git】non-fast-forwardエラーが発生した時の対処法(強制上書き・履歴消去)
公開日: 2026年08月12日
1. 発生した問題・エラー
ローカルの変更を GitHub(リモート)へ送信しようとした際、以下のエラーが発生して拒否された。
To github.com:your-name/your-repo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'github.com:your-name/your-repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.
原因
リモート(GitHub)側に、自分のローカルPCには存在しない新しいコミットがあるため。このまま push するとリモートの変更を上書きしてしまう恐れがあるため、Git の安全機能によってガードされていた。
2. 解決へのアプローチ(間違えやすいポイント)
-
git pullの失敗
手元にプロジェクトフォルダがない(.gitが存在しない)状態でgit pullを実行すると、以下のエラーになる。fatal: not a git repository (or any of the parent directories): .git👉 新規でローカルにリポジトリを作成する場合は
git pullではなくgit cloneを行う。 -
git revertとgit resetの違いgit revert:過去のコミット履歴を残したまま「打ち消す変更」を新規追加する。git reset:指定したコミットまでタイムマシンで戻り、コミット自体を完全に消去する。
今回のように「リモートの誤ったコミット自体を完全に消去してやり直したい」場合は、revert ではなく reset + 強制プッシュ(push -f) が必要。
3. 最終的な解決手順
新規フォルダで安全にやり直すための最短手順です。
-
SSHで最新のリポジトリをクローンする
git clone [email protected]:your-name/your-repo.git cd your-repo -
コミット履歴を過去の状態に巻き戻す
不要なコミット(消したいコミット)の直前の状態へ履歴を完全に戻します。git reset --hard <残したい最新のコミットID>※直前の1件を消したい場合は
git reset --hard HEAD~1でも可。 -
GitHubへ強制プッシュしてリモート履歴を上書きする
手元の巻き戻した状態を GitHub へ強制適用します。git push -f origin master
⚠️ 注意
git push -f(強制プッシュ)はリモートの履歴を直接書き換えるため、個人開発リポジトリでのみ推奨される手法です。チーム開発で使う場合は他の開発者の環境に影響が出るため注意してください。