git push origin master
显示错误
这是什么?如何恢复?无法将某些参考推送到'
git@github.com:xyz/abc.git'
为了防止您丢失历史记录,拒绝了非快进更新 在再次按下之前合并远程更改。请参阅'注意事项 “git push --help
”的快进部分了解详情。
答案 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 --amend
或git 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中子模块的常见问题 - 再次从子模块目录执行此操作)
答案 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