您正在看到Git安全功能。Git拒绝用您的分支更新远程分支,因为分支的head提交不是您要推送到的分支的当前head提交的直接后代。
如果不是这种情况,那么两个人几乎同时推送到相同的存储库将不知道同时有新的提交,而最后推送的人将丢失前一个推送器的工作而没有任何一个他们意识到这一点。
如果您知道自己是唯一推送的人,并且想要推送修订的提交或推送回退分支的提交,则可以使用-f
开关“强制” Git更新远程分支。
git push -f origin master
甚至这可能也不起作用,因为Git允许远程存储库通过使用configuration变量在远端拒绝非快进推送receive.denynonfastforwards
。如果是这种情况,拒绝原因将如下所示(请注意“远程拒绝”部分):
! [remote rejected] master -> master (non-fast forward)
为了解决这个问题,您需要更改远程存储库的配置,或者作为肮脏的黑客,您可以删除并重新创建分支,从而:
git push origin :master
git push origin master
通常,最后一个git push
使用format的参数<local_ref>:<remote_ref>
,其中local_ref
是本地存储库remote_ref
上分支的名称,是远程存储库上分支的名称。该命令对使用两个速记。:master
具有一个空的local_ref,这意味着将一个空分支推送到远程端master
,即删除远程分支。分支名称绝对不能:
将具有给定名称的本地分支推送到具有相同名称的远程分支。master
在这种情况下是简写master:master
。