我无法继续使用git?

时间:2010-08-30 06:33:33

标签: git github git-svn

git push origin master显示错误

  

无法将某些参考推送到'git@github.com:xyz/abc.git'   为了防止您丢失历史记录,拒绝了非快进更新   在再次按下之前合并远程更改。请参阅'注意事项   “git push --help”的快进部分了解详情。

这是什么?如何恢复?

6 个答案:

答案 0 :(得分:30)

请参阅"pushing a branch" section from GitHub help page

处理“非快进”错误

  

推送时可能会遇到此错误:

$ git push origin master
To ../remote/
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '../remote/'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.
  

这个错误起初可能有点压倒性,不要害怕   简单地说,git无法在不丢失提交的情况下对远程进行更改,因此它拒绝推送。通常这是由另一个用户推送到同一分支引起的   您可以通过获取和合并远程分支或使用pull来同时执行这两个操作来解决此问题。

     

在其他情况下,此错误是使用git commit --amendgit rebase等命令在本地进行破坏性更改的结果。   虽然您可以通过将--force添加到push命令来覆盖远程,但只有在绝对确定这是您想要执行的操作时才应该这样做。强制推送可能会导致已经获取远程分支的其他用户出现问题,并被视为不良做法。如有疑问,请勿强行推动。


"Note about fast-forwards" of git push中的模式详细信息,如评论中Michael Mrozek所述。

答案 1 :(得分:5)

除了VonC的回答,

如果您打算用本地覆盖远程更改,

  $git push --force

会做的。

答案 2 :(得分:3)

非常重要:如果您所在的分支的名称(并且想要合并)和上游分支不相同,也会发生这种情况。然后工作流程可能如下所示:

git pull --rebase             # to retrieve upstream changes, replay yours on top
git push --dry-run --verbose origin HEAD:master   # always good idea: dry-runs..
git push origin HEAD:master   # actually push current branch head (non-master) to upstream master

答案 3 :(得分:2)

如果你收到这个错误并且你的.git / config文件很好,那么请完成这些步骤(这是git repos中子模块的常见问题 - 再次从子模块目录执行此操作)

  1. git checkout master
  2. git pull
  3. (合并发生在后台)
  4. git push

答案 4 :(得分:2)

先拉然后按

git pull origin any_branch_name

答案 5 :(得分:0)

我也有这个,并且无法在StackOverflow上的任何地方找到以下有用的金块清楚地说明:如果你的工作分支已经偏离它,Git不会让你推到另一个分支< / strong>即可。这是一个简单的修复 - 只需切换到您想要推送的分支,并将您的工作分支合并到其中。所以不要试试这个:

git push origin master   <========== On "mybranch"

这样做:

git checkout master      <========== Switch to the branch you want to push to
git pull origin master   <========== Get latest from remote repository
git pull origin mybranch <========== Merge in changes from "mybranch"
======== Resolve any issues ========
git push origin master   <========== Push the merged changes