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 ```
原因
- 他者のコミット: 他の開発者が先にプッシュ
- force pushの履歴: 以前の強制プッシュでhistoryが分岐
- rebaseの使用: ローカルでrebaseしてhistoryが変わった
- 別ブランチからの作業: 古いコミットを基にした作業
解決策
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 の他のエラー
この記事は役に立ちましたか?