如何强制推送重置到远程存储库?

我们的远程主分支莫名其妙地搞砸了。 当前的开发代码与最新的提交一起在主分支上。 很明显,开发代码没有准备好主分支。

所以在我的本地存储库,我做了一个重置​​到最新的标签, git reset --hard (Tag) 。 主分支现在在我的本地存储库上是正确的。 现在,当我尝试将更改推送到远程存储库时, git push origin master ,我得到一个错误:

 To (REMOTE GIT REPOSITORY LOCATION) ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (eg 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. 

所以看了看后我发现了--force选项。 所以我做了一个强制推送到远程仓库, git push --force origin master ,我仍然有一个错误:

 Total 0 (delta 0), reused 0 (delta 0) remote: error: denying non-fast-forward refs/heads/master (you should pull first) To (REMOTE GIT REPOSITORY LOCATION) ! [remote rejected] master -> master (non-fast-forward) error: failed to push some refs to '(REMOTE GIT REPOSITORY LOCATION)' 

我不能拉大师,因为它包含不能在主人的发展代码。

这个信息意味着你不允许做非快进的推送。

你的远程仓库在其configuration中最有可能是denyNonFastforwards = true 。 如果你改变了, git push --force应该可以工作。

要更改设置,请执行git config receive.denynonfastforwards false

遥控器不允许非快进。

你最好的select是git revert所有不应该在那里的提交,并在将来更加小心。

git revert [commit]将创build一个新的提交,撤销任何[commit]做的事情。

尝试使用-f标志并将其放在远程分支名称后面。

git push origin master -f

以下列样式永久启用强制推送的步骤

 git push -f myrepo my-branch 

编辑远程存储库中以“.git”结尾的文件夹中名为“config”的文件

在git的失败推送的命令行输出中,查找如下所示的行:

 error: failed to push some refs to 'ssh://user@some-remote-server.mycompany.com/srv/git/myrepo.git 

然后

 ssh user@some-remote-server.mycompany.com cd /srv/git/myrepo.git vi config 

将“denyNonFastforwards”设置为false

在“configuration”中设置

 [receive] denyNonFastforwards = false 

现在,您可以使用-f从本地计算机推送

 git push -f myrepo my-branch 

你不能做git push,这不是快进的。

  1. 如果远程是GitHub,请转到https://github.com/$USER/$REPO/settings/branches并取消对有问题的分支的保护。

    在这里输入图像说明

    你必须是回购的pipe理员来做到这一点。

  2. 如果远程是你自己的git服务器,在那里运行git config receive.denynonfastforwards false

问题发生当前分支没有正确configuration为 。 首先检查使用git remote show origin是否正确configuration了上游分支。 您可以在“ 为git pull”configuration的本地分支下find它 如果没有,请使用

 git config branch.MYBRANCH.merge refs/heads/MYBRANCH 

为占位符 – MYBRANCH提供适当的分支名称