当我遇到错误时,如何删除远程分支?

6
我尝试了以下命令,但失败了。
git push origin :next
remote: error: denying ref deletion for refs/heads/next
To blah.git
 ! [remote rejected] next (deletion prohibited)
error: failed to push some refs to 'blah.git

我正在使用gitolite,但是在hooks中找不到任何此错误消息。我该如何禁用它,以便我可以删除或重命名此远程分支?当我运行git branch -r -d origin/next时,它似乎消失了,但是下一次git pull会将其重新带回。


“拒绝引用删除”消息的部分来自Git本身。请参见:builtin/receive-pack.c第369行:rp_error(“拒绝为%s删除引用”,名称); - Matthew McCullough
1
"git branch -r -d origin/next" 只会删除远程跟踪分支的本地磁盘“缓存”副本。在这种情况下,只有“push”命令才会通过网络发出指令。因此,pull 命令将重新创建它(缓存)。您实际上是要求它这样做。远程删除只能通过“git push REMOTENAME :branchname”或“git push --delete REMOTENAME branchname”来完成。 - Matthew McCullough
1
谢谢Matthew,那我该如何删除我的远程分支? - user561638
2个回答

5

请确保在您的gitolite配置中,按照以下方式设置rewind标志,以便使用RW+替代RW。这将允许您删除分支和提交记录。

git push -f origin :next


你是否使用通配符仓库?还是在配置中静态定义每个仓库? - Mohamed Mansour
我打赌使用通配符。我从工作中认识到这种类型的问题。 - ralphtheninja
如果是通配符,我相信“C”创建者只能不幸地删除分支。我可能错了。 - Mohamed Mansour

5

当你尝试将代码推送到 denyDeletes = true 的仓库时,会出现这个错误。它旨在防止您在远程中重写历史记录(通常伴随着 denyNonFastForwards = true)。在这种情况下,您只能通过在远程上删除分支来删除它; --force 无效。


所以我是管理员。我该怎么关闭这些? - user561638
没关系。我找到了要使用的gitconfig行,并将其设置为false,但是当我尝试删除远程分支时仍然出现相同的错误。 - user561638
2
你在遥控器上设置了吗?如果仍然无法解决,总还有一种蛮力的方法:去遥控器上执行 git branch -D next - ebneter
2
即使使用gitolite,裸仓库仍然是一个仓库。它响应于git分支命令(例如,通过ssh登录到服务器并cd到仓库文件夹)。"git branch -D 分支名"就可以了。大写的D表示强制删除。 - Matthew McCullough
这个方法很有效,而且还帮助我理解了应该在裸仓库中执行git gc。太棒了! - user561638
git branch -D next 对我没用 :( @user561638 你能描述一下你是如何解决它的吗? - Aguid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接