74

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

 git reset --hard head

现在我想使用以下命令将此“重置”推送到远程存储库:

git push MyBranch

但我收到此错误:

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

我尝试使用此命令但没有成功:

git push -f "origin" 

知道我能做什么吗?

4

2 回答 2

139
git push -f origin myBranch 

应该可以工作(前提是您知道如果 MyBranch 已经被其他人在他们自己的仓库中获取,这可能会很危险)

注意:如果您的远程仓库('origin')的配置设置为

receive.denyNonFastForwards true

它会拒绝任何非快进推动(即使是被迫的)。
请参阅“有没有办法配置 git 存储库以拒绝 'git push --force'? ”。


OP user654019报告

这次我设法通过设置和使用denyNonFastForwards来强制推送来解决问题false-f

如果 OP 无权访问 repo,他/她将不得不:

举例:

$ 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(-)

恢复合并

可以在此处找到有关如何还原合并的完整讨论。

这个想法仍然是只生成新的提交,包括一个还原由合并提交引入的更改。
然后,您可以将新的提交推送为快进更改。

于 2012-03-21T12:13:39.690 回答
20

您需要指定要推送的 ref:

git push -f origin MyBranch
于 2012-03-21T12:12:47.957 回答