Git推送失败,“非快速更新被拒绝”


99

我已经通过Git Online编辑了我的GIT存储库。在尝试推送本地代码更改后,出现错误:

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

我怎样才能解决这个问题?


Answers:


137

首先提取更改:

git pull origin branch_name

1
如果那不能解决您的问题,请确保将您推送到与当前正在处理的分支相同的分支。使用“ git status”检查您所在的分支。
afilina

1
这个命令对我有用,但是我想知道,为什么不这样做git pull?遥控器等于origin,因此它实际上可以运行:git pull origin。它不应该更新所有分支吗?
卡伦·基什米尔扬2015年

83

如果确定要推送,请在命令行中添加--force。例如,使用git push origin --force(我建议使用命令行,因为您会从命令行中找到其他用户的更多支持。同样,SmartGit也可能无法实现。)请参阅此站点以获取更多信息:http : //help.github.com/遥控器/


8
--force将解决您的问题,但可能会伤害他人。仅应非常小心(和知识)地使用它
schoetbi 2013年

7
-1,因为一般来说强迫推是一个糟糕的主意。
joshin4colours

6
+1是因为5个人同意@ joshin4colours给出-1。但是,虽然强制推送并不总是最好的主意(git通过拒绝您的推送很清楚地表明了这一点),但如果100%的情况下是个不好的主意,则该选项将不存在。马特的建议对其他人肯定是有用的。
user1271772

2
--force如果您是唯一使用该分支的人,请随时使用。与其他开发人员共享分支时,确实会引起问题。
罗伯特·布里斯塔

22

推送之前,请使用带有rebase选项的git pull。这将获取您在线进行的更改(在您的原始位置)并在本地应用它们,然后在其上添加本地更改。

git pull --rebase

现在,您可以推送到远程

git push 

有关更多信息,请参阅Git rebase的说明第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
失去他人的承诺。
乔瓦尼·托拉尔多

1
我遇到了一个奇怪的情况,这正是我想要做的...用新的东西吹走刚刚创建的远程主分支的内容。这解决了我的问题。尽管它并不是每个人的解决方案,但它--force可能会有所帮助。
布拉德

1
我认为这个答案不应该被否决6次。这是对所提供问题的有效解决方案,但是,作者可能对该命令在何种情况下有用的描述性更高。如果值得一提,因为它值得编写(--force的功能)
Aiden Strydom

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

(一个)Netbeans 7.1解决方案:尝试拉一下。这可能也会失败。现在看一下日志(它们通常现在在IDE中显示)。有一个/多个行说:

“由于此文件,拉失败:”

搜索该文件,将其删除(之前进行备份)。通常它是一个.gitignore文件,因此您不会删除代码。重做推送。现在一切正常。


1

使用该--rebase选项对我有用。

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

然后推送到仓库。

  • git push <remote> <branch>

例如

git pull origin master --rebase

git push origin master



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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.