21

我正在尝试撤消已经推送到远程存储库的一些更改,并且我已经在本地完成了

git reset --hard COMMIT-HASH

但是现在它不会让我不先拉就推,这当然违背了目的。我试过了:

git push -f

哪些错误:

Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To git@xxx.beanstalkapp.com:/yyy.git
 ! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@xxx.beanstalkapp.com:/yyy.git'

那么如何将我新的、正确版本的分支转移到远程呢?

4

3 回答 3

26

git config手册页:

receive.denyNonFastForwards

如果设置为 true,git-receive-pack 将拒绝不是快进的 ref 更新。使用它来防止通过推送进行此类更新,即使该推送是强制的。此配置变量在初始化共享存储库时设置。

您尝试推送到的服务器已启用此设置。因此,简短的回答是,在这种情况下,您将无法git push --force.


要将正确版本的分支发送到远程,您必须对分支的尖端进行新的提交,使其进入正确的状态。如果您当前处于正确状态的提交状态,则可以运行以下命令:

$ git reset --soft <remote>/<branch>    # point the ref back to the remote, but
                                        #   keep the index and working tree

$ git commit                            # make the 'correction' commit
$ git push
于 2012-08-06T14:20:57.640 回答
3

您的服务器是否不允许非快进推送?

git 配置文件

[receive]
denyNonFastforwards = true
于 2012-08-06T14:17:14.143 回答
0

在 git 中撤消更改的最佳方法是使用git revert命令。

要撤消上一次提交: git revert HEAD^

它将撤消上次提交中所做的更改,然后在其之上创建一个新提交。

希望它可以帮助某人..

于 2013-01-09T10:59:35.327 回答