使用git reset --hard后无法推送更改

99

我犯了一个错误并提交了一些我不应该提交的更改到git中。 在我提交更改后,我推送了我的更改。 然后我使用了以下命令来尝试重置我的更改。

 git reset --hard head

现在我想用这个命令将这个“reset”推送到远程仓库:

git push MyBranch

但我收到了这个错误:

remote: error: denying non-fast-forward refs/heads/branch (you should pull first)

我尝试使用这个命令,但没有成功:

git push -f "origin" 

有任何想法我该怎么做吗?

2个回答

172
git push -f origin myBranch 

只要你知道如果MyBranch已经被其他人在他们自己的仓库中获取过,这样做可能是危险的,那么这种方法就可以工作。

自2012年以来,你还有:

注意:如果你的远程仓库('origin')设置了其config,则该命令将正常工作。

receive.denyNonFastForwards true

它将拒绝任何非快进式推送(即使是强制推送)。
请参阅“Is there a way to configure git repository to reject 'git push --force'?”。


用户654019 报告:

我通过将 denyNonFastForwards 设置为 false 并使用 -f 强制推送来解决了这个问题

如果原帖作者没有访问仓库的权限,他/她需要:

例如:

$ git revert -m 1 [sha_of_C8]
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
 1 files changed, 0 insertions(+), 2 deletions(-)

撤销合并

如何撤销合并的完整讨论可以在这里找到。

关键是生成仅包含一个撤销合并的新提交,不包括原合并提交带来的变更。
然后,您可以将该新提交推送为快进更改。


别忘了“--”的快捷方式。这使您可以相当迅速地使用“git push -f --”以实现相同的效果。 - bitfed
@Michael One:是的,这是在远程端设置的配置,而不是你正在推送的客户端端。 - VonC
@Michael 最好提出一个新问题,详细说明你所处的状态,包括命令和git状态,以及操作系统和git版本。这样,我或其他贡献者可以向您解释(更重要的是,可能会遇到相同情况的其他用户)为什么需要超过5秒钟的时间。 - VonC
@VonC 谢谢,你能给我指一些关于如何获取和设置远程配置的文档吗?我找不到它,而我的尝试(例如“git remote config --get receive.denyNonFastForwards”)并没有起作用。 - Michael
1
@Michael 我理解你的沮丧。实际上,这是一个不错的解决方案,根据xkcd ;) https://xkcd.com/1597/ - VonC
显示剩余10条评论

26

您需要指定要推送的 ref:

git push -f origin MyBranch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接