1. ホーム
  2. git

[解決済み] Git push non-fast-forward updates were rejected "とはどういう意味ですか?

2022-04-26 14:24:45

質問

私は2台のコンピューターと開発を管理するためにGitを使っています。GitHub に変更をコミットしようとすると、次のようなエラーが発生します。

にいくつかの参考文献をプッシュするのに失敗しました。 <repo> . 履歴を失わないために、fast-forward でない更新は拒否されました。再度プッシュする前にリモートの変更をマージしてください。

何が原因で、どのように修正すればよいのでしょうか?

EDITです。

レポを引っ張ると以下のようなものが返ってきます。

*ブランチ master->master (非ファストフォワード) すでに最新版

プッシュしても前述のようなエラーが出ます。

解決方法は?

GitHubには、"という素敵なセクションがあります。 非速送り」エラーへの対応 "。

このエラーは、最初は少し圧倒されるかもしれませんが、恐れることはありません。

簡単に言うと、git はリモートのコミットを失うことなく変更を加えることができないので、プッシュを拒否しているのです。 .

通常、これは他のユーザーが同じブランチにプッシュした場合に起こります。リモートブランチを取得してマージするか、pull を使って両方を一度に実行することで、これを改善することができます。

また、以下のようなコマンドを使用してローカルで破壊的な変更を行った結果、このエラーが発生する場合もあります。 git commit --amend または git rebase .

を追加することで、リモートをオーバーライドすることができます。 --forcepush コマンドを使用する場合は、絶対にこれだと確信できる場合のみにしてください。

強制プッシュは、リモートブランチを取得した他のユーザーに対して問題を引き起こす可能性があり、バッドプラクティスとみなされます。 疑問がある場合は、強制プッシュをしないでください。 .


Git は、fast-forward merge のようにリモートで変更を行うことはできません。 Git ビジュアルリファレンス のように図解しています。

これは まさに がどのようなものかを知るのに役立ちます。 HEAD のブランチは、単に新しいより新しいコミットに移動されます)。


の"です。 branch master->master (non-fast-forward) Already-up-to-date は、通常、リモートの相手を追跡していないローカルブランチのためのものです。

例えば、このSOの質問"をご覧ください。 git pullでは最新と表示されるが、git pushではnon-fast forwardが拒否される。 "。

あるいは、2つのブランチはつながっているが、それぞれの履歴に不一致がある。

"をご覧ください。 終わらないGITの話 - ここで間違っていることは何ですか? "

<ブロッククオート

これは、あなたの subversion ブランチとリモートの git master ブランチが、何かで合意していないことを意味します。

一方にプッシュ/コミットされた変更点のうち、もう一方にないものがある。

起動する gitk --all 履歴の中に "forks" があるので、何が問題だったのかが分かるはずです。