Git推送失败,"非快进更新被拒绝"

Sar*_*ath 98 git push github

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

Git push failed, To prevent from losing history, non-fast forward updates were rejected.
Run Code Online (Sandbox Code Playgroud)

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

iaf*_*nov 135

先拉变化:

git pull origin branch_name
Run Code Online (Sandbox Code Playgroud)


小智 83

如果您确定要推送,请在命令行中添加--force.例如使用git push origin --force(我建议使用命令行,因为您可以通过命令行找到其他用户的更多支持.使用SmartGit可能无法实现这一点.)有关详细信息,请访问此站点:http://help.github.com/遥控器/

  • --force将解决您的问题,但可能会伤害他人.它应该只在非常小心(和知识)使用 (7认同)
  • -1因为强迫推动*一般来说*是一个可怕的想法. (7认同)
  • +1因为5个人同意@ joshin4colours给-1.但是,虽然强制推动并不总是最好的想法(git通过否认你的推动而非常清楚),如果在100%的时间内这是一个坏主意,那么该选项将不存在.马特在这里的建议当然对其他人有用. (6认同)
  • 如果您是唯一使用该分支的人,请随时使用--force。与其他开发人员共享分支时,确实会引起问题。 (2认同)

小智 21

在推送之前,使用rebase选项进行git pull.这将获得您在线(在您的原点)所做的更改并在本地应用它们,然后在其上添加您的本地更改.

git pull --rebase
Run Code Online (Sandbox Code Playgroud)

现在,你可以推送到远程

git push 
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Git rebase解释第3.6章Git分支 - 重新定位.

  • 在我的情况下,`git pull --rebase`以"没有当前分支的跟踪信息"结束.请指定您要反对哪个分支 (2认同)

小智 14

我遇到了同样的错误,只需在命令中添加"--force"即可

git push origin master --force
Run Code Online (Sandbox Code Playgroud)

  • 失去他人的承诺. (7认同)
  • 对此有后果吗? (5认同)

小智 6

您可以将--force-with-lease添加到命令中,它将起作用。

git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)

--force是破坏性的,因为它无条件地用您本地拥有的任何内容覆盖远程存储库。但是--force-with-lease确保您不会覆盖其他人的工作。

在此处查看更多信息。


har*_*oth 5

我遇到了同样的问题。
原因是,我的本地分支不知何故丢失了对远程对应方的跟踪。

git branch branch_name --set-upstream-to=origin/branch_name
git pull
Run Code Online (Sandbox Code Playgroud)

并解决合并冲突,我能够推动。