「Gitプッシュの非早送りの更新が拒否されました」とはどういう意味ですか?


153

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

一部の参照をにプッシュできませんでした<repo>。履歴が失われないようにするため、非早送りの更新は拒否されました。再度プッシュする前にリモートの変更をマージします。

これを引き起こしている可能性のあるものと、これを修正する方法を教えてください。

編集:

リポジトリをプルすると、次が返されます。

*ブランチマスター->マスター(早送りではありません)すでに最新

それでもプッシュすると、前述のエラーが発生します。


Git non-fast-forward rejectedも参照してください。

回答:


136

GitHubには、「「早送りでない」エラーへの対処」という素晴らしいセクションがあります

このエラーは、最初は少し圧倒される可能性があります。心配しないでください。
簡単に言うと、gitはコミットを失うことなくリモートで変更を行うことができないため、プッシュを拒否します。
通常、これは別のユーザーが同じブランチにプッシュしたことが原因です。これを解決するには、リモートブランチをフェッチしてマージするか、プルを使用して両方を一度に実行します。

他の場合には、このエラーは次のようにコマンドを使用して局所的に作られた破壊的変更の結果ですgit commit --amendか、git rebase。コマンドに
追加--forceすることでリモートをオーバーライドできますが、pushこれがあなたがしたいことであることが確実である場合にのみ行うべきです。
強制プッシュは、リモートブランチをフェッチした他のユーザーに問題を引き起こす可能性があり、悪い習慣と見なされています。疑問がある場合は、無理に押し込まないでください


Gitは、Visual Gitリファレンスで次のように示されている早送りマージのように、リモートで変更を加えることはできません。

代替テキスト

これは厳密にはあなたのケースではありません、「早送り」が何であるかを確認するのに役立ちます(HEADブランチのが新しいコミットに移動されるだけです)。


branch master->master (non-fast-forward) Already-up-to-date」は、通常、リモートの相手を追跡しないローカルのブランチ用です。
たとえば、このSOの質問「git pullは最新であるが、git pushは非早送りを拒否する」を参照してください。
または、2つのブランチは接続されていますが、それぞれの履歴に同意していません
終わりのないGITストーリー-ここで何が間違っているのですか?

これは、subversionブランチとリモートgit masterブランチが何かについて合意していないことを意味します。
ある変更が他の変更ではないものにプッシュ/コミットされました。
起動するとgitk --all、何が問題だったかについての手掛かりが得られるはずです。履歴で「フォーク」を探してください。


53

これは、リモートリポジトリにプッシュされたコミットとは異なる他のコミットがあったことを意味します。通常、これを解決するには

git pull

あなたが押す前に

結局のところ、「早送り」とは、マージを必要とせずにコミットを作業ツリーの上に直接適用できることを意味します。


2
これは私のために働いたものです!リポジトリサイトのreadme.mdを変更したのを忘れました。
ライアンウィンチェスター2013

14

早送り更新とは、一方の変更がもう一方の最新のコミットの後であるため、マージする必要がない場合です。これは、プッシュする前に変更をマージする必要があることを示しています。


8

この場合、プッシュ操作でフォースを使用することができます

git push origin master --force


1
それは間違っています。githubのソース全体が削除され、新しいソースのみがプッシュされます古いソースが削除されます
logeshpalani98

6

やることはありませんgit -fやってpush、それが後の悲惨な結果につながることができますよう。

あなただけgit pullのあなたのローカルブランチを行う必要があります。

例:

git pull origin 'your_local_branch'

そして次に git push


0

conflicts locally変更をリモートリポジトリ/フォークにプッシュする前に、をマージして解決する必要があります。

1)プル(フェッチとマージ)

$ git pull remote branch 

2)変更をプッシュする

$ git push remote branch 

それでも、オプションpushを使用して強制的に迅速に選択することは--forceできますが、変更が失われたり、他の貢献者に悪影響を及ぼす可能性があるため、避けてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.