无法从 Gitlab 中删除名为分支的 40 个字符

Cannot remove 40 characters named branches from Gitlab

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

问题是,我不知道如何删除这个分支。 当我按下“删除分支”按钮时,Gitlab UI return 代码 400。 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.

有什么方法可以完成这个任务吗?

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

By default, GitLab restricts certain formats of branch names for security purposes. 40-character hexadecimal names, similar to Git commit hashes, are prohibited.

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

建议的解决方案:Remove/Replace 现有推送规则。

不过,这是一项高级功能。

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

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

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

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

这是一个 GitLab 错误。他们在 GitLab 12.10 中添加了检查以防止创建具有 40 个十六进制字符的分支:

参见documentation

Default restricted branch names

Introduced in GitLab 12.10.

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

但是他们不允许删除这样的分支。

这已在 v14.6 中修复,现在可以再次删除那些遗留分支:请参阅 relevant issue and merge request