首页 > 解决方案 > 无法从 Gitlab 中删除陈旧的分支?

问题描述

我有一个 Gitlab 存储库,其中包含我以前没有注意到的陈旧分支。我认为它们是由 Gitlab 在其中一位用户使用内置文件编辑器对存储库进行更改时创建的。他们有自动生成的名字,看起来像这样 0a9cc10e66e4e7e48bf7a7fc302e5dc25dd21416

问题是,我不知道如何删除这个分支。400当我按下“删除分支”按钮时,Gitlab UI 返回代码。并且 git cli 也失败了。

git branch --all

* master
  remotes/origin/0a9cc10e66e4e7e48bf7a7fc302e5dc25dd21416
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

git push origin --delete 0a9cc10e66e4e7e48bf7a7fc302e5dc25dd21416

remote: GitLab: You cannot create a branch with a 40-character hexadecimal branch name.

有没有办法完成这个任务?

标签: gitgitlabgit-branch

解决方案


错误响应的原因是主动推送规则。GitLab 为git push事件提供自定义挂钩。一个这样的钩子是以下安全检查,默认激活。

默认情况下,GitLab 出于安全目的限制某些格式的分支名称。禁止使用 40 个字符的十六进制名称,类似于 Git 提交哈希。

https://docs.gitlab.com/ee/push_rules/push_rules.html#default-restricted-branch-names

建议的解决方案:删除/替换现有的推送规则。

然而,这是一项高级功能。

所有项目:打开管理区 > 推送规则

仅一个项目:打开项目>设置>存储库>选项卡»推送规则«

备选方案:使用 API 删除分支。

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://<your-gitlab-instance>.com/api/v4/projects/<project-id>/repository/branches/<branch-name>"

推荐阅读