按任何内容删除 git 分支,而不是名称

Delete git branch by anything, not name

我在删除 git 分支时遇到问题。起初我能够使用 'git checkout -b ....' 创建它。但在我看来,我在写作时犯了一个错误,打错了,然后退格。导致这个分支名称错误。

我能够在这个分支上工作,甚至将它推送到远程,但它会产生奇怪的行为(在 Web 界面中看不到分支)。

git branch -r 给我看

origin/master
origin/rrseria_test_utility

在 Web 界面 (bitbucket) 中,我可以在具有以下名称的提交中看到此分支

rrseriaÅl_test_utility

请注意,大写字母A不仅仅是A,而是上面带圆圈的A。好像是 utf-8 字符 'U+00C5'.

当我尝试删除它时,

git branch -d rrseria_test_utility
error: branch 'rrseria_test_utility' not found. 

git checkout rrseria_test_utility
error: pathspec 'rrseria_test_utility' did not match any file(s) known to git. 

你能帮我删除这个分支吗?

您可以使用 git branch --list rrseria* 仅列出名称以 rrseria 开头的分支。如果有多个,您可以使用更具体的模式,对非 ASCII 字符使用 * 通配符 (rrseria*l_test_utility f.e.).

此命令显示要删除的分支的名称。

如果您使用的是 Linux 或 macOS,您可以使用其输出创建 Git 命令来删除该分支:

git branch -d $(git branch --list rrseria*)

或者您可以使用鼠标从 git branch --list 的输出中复制终端 window 中的分支名称并粘贴(返回到终端 window)以创建git branch -d命令。

或者您可以使用您最喜欢的文件管理器在 .git/ref/heads 目录中导航并删除名称与分支名称匹配的文件(这是 git branch -d 在后台所做的)。

之后,您必须将删除推送到远程存储库:

git push origin --prune refs/heads/*

如果您有多个遥控器,则对每个遥控器重复上述命令(输入其名称而不是 origin)。