我们的远程主分支不知怎的搞砸了。当前开发代码与最新提交一起在主分支上。显然,开发代码还没有为主分支做好准备。
因此,在我的本地存储库中,我重置了最新的标记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上的开发代码。
答案 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推送。
答案 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分支来解决该问题,而这在存储库设置中刚刚超出了受保护的分支规则。