MeWrite Docs

Git: Push rejected - non-fast-forward

Gitでプッシュが拒否された場合のエラー原因と解決策

概要

リモートブランチがローカルより進んでいるため、プッシュが拒否されるエラーです。

エラーメッセージ

``` ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to ‘origin’ hint: Updates were rejected because the tip of your current branch is behind ```

原因

  1. 他者のコミット: 他の開発者が先にプッシュ
  2. force pushの履歴: 以前の強制プッシュでhistoryが分岐
  3. rebaseの使用: ローカルでrebaseしてhistoryが変わった
  4. 別ブランチからの作業: 古いコミットを基にした作業

解決策

1. プルしてからプッシュ(推奨)

```bash git pull origin main

コンフリクトがあれば解決

git push origin main ```

2. rebaseでプル

```bash git pull –rebase origin main git push origin main ```

3. fetchして確認

```bash

リモートの状態を取得

git fetch origin

差分を確認

git log HEAD..origin/main git diff HEAD origin/main

マージ

git merge origin/main ```

4. 強制プッシュ(注意)

```bash

自分だけのブランチの場合のみ

git push –force-with-lease origin feature-branch

–force は他者のコミットを消す可能性があるので非推奨

git push –force origin main # 危険!

```

5. 新しいブランチで作業

```bash

現在の作業を新ブランチに

git checkout -b my-feature

mainを最新化

git checkout main git pull origin main ```

6. protected branchの場合

```bash

PRを作成してマージ

git checkout -b fix/my-changes git push origin fix/my-changes

GitHub/GitLabでPRを作成

```

よくある間違い

  • mainブランチを–forceでプッシュ
  • プル前に作業を始める
  • コンフリクトを適当に解決

関連エラー

関連エラー

Git の他のエラー

最終更新: 2025-12-10