当我使用了一点源代码后,我做了我通常的事情提交,然后推送到远程存储库。但后来我注意到我忘记在源代码中组织导入。因此,我执行modify命令以替换先前的commit:
> git commit --amend
不幸的是,无法将提交推回到存储库。它是这样被拒绝的:
> git push origin
To //my.remote.repo.com/stuff.git/
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'
我该怎么办?(我可以访问远程存储库。)
您正在看到Git安全功能。Git拒绝用您的分支更新远程分支,因为您的分支的头部提交不是您要推送的分支的当前头部提交的直接后代。
如果不是这样的话,那么两个同时推到同一个存储库的人就不会知道同时有一个新的提交,而最后推的人都会失去前一个推的人的工作,而他们中的任何一个都没有意识到这一点。
如果你知道你是唯一一个推送的人,并且你想推送一个修改后的提交或推送一条返回分支的提交,你可以使用-f开关“强制”Git更新远程分支。
git push -f origin master
即使这样也可能不起作用,因为Git允许远程存储库通过使用配置变量receive.denynonfastforwards在远端拒绝非fastforward推送。如果是这种情况,拒绝原因如下(注意“远程拒绝”部分):
! [remote rejected] master -> master (non-fast forward)
为了解决这个问题,您需要更改远程存储库的配置,或者作为一个肮脏的黑客,您可以删除并重新创建分支,从而:
git push origin :master
git push origin master
通常,git push的最后一个参数使用格式<local_ref>:<remote_ref>,其中local_ref是本地存储库上分支的名称,remote_ref是远程存储库上的分支的名称。此命令对使用两个短手。:master有一个空的localref,这意味着将一个空分支推送到远程端master,即删除远程分支。没有:的分支名称表示将具有给定名称的本地分支推送到具有相同名称的远程分支。在这种情况下,master是master:master的缩写。