Gitプッシュが失敗した、「非早送りの更新は拒否された」


99

Git OnlineでGITリポジトリを編集しました。ローカルコードの変更をプッシュしようとした後、エラーが発生しました。

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

どうすれば修正できますか?


回答:


137

最初に変更をプル:

git pull origin branch_name

1
それでも問題が解決しない場合は、現在作業中のブランチと同じブランチにプッシュしていることを確認してください。「git status」を使用して、現在どのブランチにいるかを確認します。
afilina

1
このコマンドはうまくいきましたが、知りたいのですが、なぜこれがうまくいかないのですgit pullか?リモートはと等しいためorigin、実際には次のように実行されますgit pull origin。すべてのブランチを更新する必要はありませんか?
Karlen Kishmiryan 2015

83

プッシュしたい場合は、コマンドラインに--forceを追加してください。例git push origin --force(コマンドラインを使用すると、他のユーザーからのサポートが大幅に増えるため、コマンドラインをお勧めします。SmartGitではこれができない場合もあります。)詳細については、次のサイトを参照してください。http://help.github.com/ リモート/


8
--forceは問題を解決しますが、他の人に害を及ぼす可能性があります。それは多くの注意(そして知識)をもってのみ使用されるべきです
schoetbi

7
-1 一般にプッシュを強制するのはひどい考えです。
joshin4colours 2013年

6
5人が@ joshin4coloursに-1を与えることに同意したため、+ 1。しかし、強制プッシュが常に最良のアイデアであるとは限りませんが(gitはプッシュを拒否することでかなり明確になります)、100%悪いアイデアである場合、オプションは存在しません。ここでのマットの提案は確かに他の人に役立つ可能性があります。
user1271772 2017

2
--forceそのブランチを使用しているのがあなただけの場合は、自由に使用してください。ただし、ブランチを他の開発者と共有するときに問題が発生します。
Robert Brisita

22

プッシュする前に、リベースオプションを使用してgit pullを実行します。これにより、(オリジンで)オンラインで行った変更が取得され、ローカルに適用されます。次に、ローカル変更をその上に追加します。

git pull --rebase

これで、リモートにプッシュできます

git push 

詳細について説明されているGitリベース第3.6章のGitブランチ-リベースを参照してください


2
私の場合git pull --rebaseで終わるThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
trejder

17

同じエラーが発生しました。コマンドに「--force」を追加するだけで機能します

git push origin master --force

6
これへの影響はありますか?
jayunit100

8
他人のコミットを失う。
Giovanni Toraldo 2013

1
これがまさに私がやりたかった奇妙な状況でした...作成したばかりのリモートマスターブランチの内容を何か新しいもので吹き飛ばしました。これは私の問題を解決しました。それは誰にとっても解決策ではありませんが、--force役に立ちます。
ブラッド

1
この回答は6回反対票を投じるに値するとは思わない。これは提供された問題に対する有効な解決策ですが、作成者はこのコマンドが役立つ状況についてもう少し説明している可能性があります。書く価値があったので言及する価値がある場合(--forceの機能)
Aiden

5

同じ問題がありました。
その理由は、私のローカルブランチがリモートの相手への追跡を何らかの形で失っていたからです。

git branch branch_name --set-upstream-to=origin/branch_name
git pull

マージする競合を解決することで、私はプッシュすることができました。


リモートブランチの変更を見逃しているようです
ozma

5

コマンドに--force-with-leaseを追加できます。コマンドは機能します。

git push --force-with-lease

--forceは、ローカルにあるものでリモートリポジトリを無条件に上書きするため、破壊的です。ただし、-force-with-leaseを使用すると、他のユーザーの作業を上書きしないようにすることができます。

詳細はこちらをご覧ください。


1

(1)Netbeans 7.1のソリューション:プルしてみてください。これもおそらく失敗します。ログを確認します(通常、IDEに表示されます)。1行以上の言い方があります:

「このファイルが原因でプルに失敗しました:」

そのファイルを検索して削除します(前にバックアップを作成します)。通常は.gitignoreファイルなので、コードを削除しません。プッシュをやり直します。すべてが正常に動作するはずです。


1

--rebaseオプションを使用するとうまくいきました。

  • git pull <remote> <branch> --rebase

次に、リポジトリにプッシュします。

  • git push <remote> <branch>

例えば

git pull origin master --rebase

git push origin master


0

私は同じ問題を抱えていました。私は解決しました

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>

3
OPは、ローカルコードの変更のプッシュについて述べています。checkoutこれらの変更を上書きするか、少なくともプッシュに含めません。
trejder 2013

0

これは私のために働いたものです。gitのドキュメントにありますこちらのます

あなたがあなたの望むブランチにいるなら、あなたはこれをすることができます:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

0

同じ問題が発生しましたgit。それを解決するには、次のコマンドを実行します。

  • git pull {url} --rebase
  • git push --set-upstream {url} master

最初にgithubにリポジトリを作成しておく必要があります。


0

時々、gitからプルしているときに、HEADが切り離されます。これを確認するには、次のコマンドを入力します。

git branch 
  • (HEADは8790704から切り離されています)

    主人

    発展させる

ブランチに移動して、それぞれのブランチから新しいプルを取得することをお勧めします。

git checkout develop

git pull origin develop

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