您正在看到 Git 安全功能。Git 拒绝使用您的分支更新远程分支,因为您的分支的头部提交不是您要推送到的分支的当前头部提交的直接后代。
如果不是这种情况,那么两个人几乎同时推送到同一个存储库将不知道有一个新的提交同时进入,最后推送的人将失去前一个推送者的工作,而没有任何一个他们意识到这一点。
如果您知道您是唯一推送的人,并且您想要推送修改后的提交或推送回滚分支的提交,您可以使用-f
开关“强制”Git 更新远程分支。
git push -f origin master
即使这也可能不起作用,因为 Git 允许远程存储库通过使用配置变量在远端拒绝非快进推送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
.