Git 无需拉动即可推动更改

Git 无需拉动即可推动更改,git,Git,我正在尝试撤消一些已经推送到远程存储库的更改,我已经在本地通过 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.bea

我正在尝试撤消一些已经推送到远程存储库的更改,我已经在本地通过

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'

那么,如何将新的、正确的分支版本发送到远程?

您的服务器是否禁止非快进推送

git配置文件

[receive]
denyNonFastforwards = true

git config
手册页:

receive.denynonfastforts

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

您尝试推送到的服务器已启用此设置。所以,简短的回答是,在这种情况下,您将无法
gitpush--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
$git reset--soft/#将ref指向远程,但是
#保留索引和工作树
$git提交#进行“更正”提交
$git推送

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

要撤消上次提交,请执行以下操作:
git还原头^

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


希望它能帮助别人。

对你有帮助吗?@Hassan-对不起,没有。我已经回滚了我不想要的提交,现在问题是将其成功推送到远程。如果你已经在git服务器上回滚了提交,那么为什么你不能拉?默认情况下,可能会禁用重复的提交,并发出警告:“除非您知道自己在做什么,否则我们不建议您更改这些设置。Beanstalk提供了适用于大多数用户的合理默认设置。" ... 尽管启用它和强制推送可以解决问题,但在使用主题分支时,强制推送除master之外的分支是必不可少的。合并两个分支可能会导致代码丢失,因为它只比较给定分支的提示。重定基可爬过自最新公共祖先以来的所有提交,并提供更好的结果,但需要重写无法由快进处理的提交。git新手用户不知道什么是重定基址,所以这个选项对他们很好。