【问题标题】:Can not push changes after using git reset --hard使用 git reset --hard 后无法推送更改
【发布时间】:2012-04-05 22:44:44
【问题描述】:

我犯了一个错误,对 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" 

知道我能做什么吗?

【问题讨论】:

    标签: git git-revert


    【解决方案1】:
    git push -f origin myBranch 
    

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

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

    receive.denyNonFastForwards true
    

    它会拒绝任何非快进推送(即使是强制的)。
    见“Is there a way to configure git repository to reject '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(-)
    

    关于如何恢复合并的完整讨论可以be found here

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

    【讨论】:

    • 它没有用。可能配置是在存储库中设置的。两个问题:如果denyNonFastForwards 为真,解决此问题的最佳方法是什么?如何恢复一些 mchange(合并)并创建新的提交?
    • @user654019:通过创建一个由取消之前提交的更改组成的新提交:使用git revert:然后您将能够以快进推送的方式推送该新提交。
    • 原来的提交是一个合并,当我尝试做一个 revert -m 1 我得到了一些错误
    • 和这个类似,就是不能快进
    • @Michael 我理解你的沮丧。根据 xkcd 的说法,实际上不是一个糟糕的解决方案;)xkcd.com/1597
    【解决方案2】:

    您需要指定要推送的 ref:

    git push -f origin MyBranch
    

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2012-07-08
      • 1970-01-01
      • 2018-01-13
      • 2018-11-24
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多