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

时间:2012-05-11 01:09:42

标签: git

我们的远程主分支不知怎的搞砸了。当前开发代码与最新提交一起在主分支上。显然,开发代码还没有为主分支做好准备。

因此,在我的本地存储库中,我重置了最新的标记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 (e.g. '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)'

我不能对master进行拉取,因为它包含不能在master上的开发代码。

10 个答案:

答案 0 :(得分:131)

该消息表示您不允许进行非快进推送。

您的远程存储库很可能在其配置中denyNonFastforwards = true。如果你改变了,git push --force应该有效。

要更改设置,您需要使用远程存储库访问计算机。从那里开始git config receive.denynonfastforwards false

答案 1 :(得分:14)

遥控器不允许非快进。

您最好的选择是git revert所有不应该提交的提交,并且将来会更加小心。

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

答案 2 :(得分:12)

以下列风格永久启用强制推送的步骤

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

在“config”中,设置

[receive]
        denyNonFastforwards = false

现在您可以使用-f

从本地计算机上推送
git push -f myrepo my-branch

答案 3 :(得分:9)

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

git push origin master -f

答案 4 :(得分:2)

你不被允许进行不快进的git推送。

  1. 如果遥控器是GitHub,请转到https://github.com/$USER/$REPO/settings/branches并取消保护相关分支。

    enter image description here

    你必须成为回购的管理员。

  2. 如果遥控器是您自己的git服务器,请在那里运行git config receive.denynonfastforwards false

答案 5 :(得分:2)

解决此问题的最佳方法是删除远程分支并重新发送:

git push origin master --delete
git push origin master

答案 6 :(得分:0)

由于当前分支未针对 PULL 正确配置,因此会出现此问题。 首先使用 - git remote show origin检查上游分支是否已正确配置以进行拉取。您可以在配置为' git pull' 本地分支部分下找到它。如果没有,请使用以下命令进行配置:

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

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

答案 7 :(得分:0)

我使用这组命令来重置我的远程仓库,这将重新初始化您的本地仓库并重新链接您的远程仓库,然后强制推送更新。

我认为这种方式在您的情况下不会起作用,但可能对其他人有用

转到源文件夹然后运行命令: 请注意https://github.com/*.git是您的远程回购链接

git init
git remote add origin https://github.com/*.git
git add .
git commit -m "initial commit"
git push origin master -f
git push --set-upstream origin master

<强> **Note: this will clear all your git history on your master branch**

答案 8 :(得分:0)

对我来说,@svick的提示指向正确的方向。由于我要修改的git服务器实际上是我的盒子,因此我登录到它,并做了if (i === boss) { values.push(score * 2); } else { values.push(score); } 来更改所有存储库以接受强制的非ff推送。开箱即用。我发现在配置中已经设置了git config --global receive.denynonfastforwards false,无法用receive.denynonfastforwards=true删除它。 不过,手动在仓库(git config --global --unset receive.denynonfastforwards中进行编辑是可行的。

答案 9 :(得分:0)

我通过从受保护的默认分支中删除了master分支来解决该问题,而这在存储库设置中刚刚超出了受保护的分支规则。