无法删除带有特殊字符的git远程分支

4

在标记此问题为重复之前,请仔细阅读。

如果您列出分支,它将显示为:

$git branch -a
  remotes/origin/feat/verify-<C3>email

分支名称是:
origin/feat/verify-√email

如果您试图从Github仪表板访问分支url:

The github page broke into a HTTP error 400

如果您尝试删除该分支:

$ git push origin --delete feat/verify-√email
error: unable to delete 'feat/verify-√email': remote ref does not exist
error: failed to push some refs to 'https://mataide@github.com/mataide/proak-website.git'

按模式删除:

git branch -d -r $(git branch --list origin/feat/ve* -r)
error: cannot lock ref 'refs/remotes/origin/feat/verify-?email': Unable to create '/Users/marcus/Documents/Workspace/proak-website/.git/refs/remotes/origin/feat/verify-?email.lock': Illegal byte sequence
error: Error deleting remote-tracking branch 'origin/feat/verify-?email'

如果您尝试使用名称feat/verify-email删除,则会出现相同的错误。如果您尝试使用Sourcetree等工具删除也是无效的。

我只想删除这个分支,有什么帮助吗?


这可以帮助吗?https://stackoverflow.com/questions/50365592/delete-git-branch-by-anything-not-name - Renat
@Renat,我尝试了这个解决方案,但还是出现了错误。我会更新问题。 - Marckaraujo
有没有可能通过远程的 UI(如 Github、Gitlab 等)来完成呢? - JakeParis
@JakeParis,我尝试使用Sourcetree。它也显示未找到错误。 - Marckaraujo
是的,但SourceTree不是本地应用程序吗?我在想,也许远程UI对分支名称中的特殊字符处理更好。 - JakeParis
你能在本地更改分支名称吗? - JakeParis
1个回答

0

我从您的帖子中复制并粘贴的字符是一个Unicode平方根符号:U+221A—请参见https://en.wikipedia.org/wiki/Radical_symbol。而在另一个Git中实际上出现的是一些非Unicode字符集中的代码字节C3。您需要让另一个Git以某种方式将其删除。

git push --delete是个好主意,但您必须向另一个Git发送完全相同的字节序列。我不清楚您正在使用的终端会话如何做到这一点。如果您使用的是MacOS,可以编辑一个包含正确字节序列的shell脚本文件:只需运行git branch -r > /tmp/script,在适当的编辑器(例如vim)中打开该文件,删除所有无关的行,并在剩余的有错误名称的行前插入git push origin --delete。然后运行生成的脚本,例如sh /tmp/script。在没有人工干预(或编辑器)的情况下,该行上的原始字节码序列应该保持不变。

使用git branch -d -r命令,即使它能够工作,也不会真正帮助解决问题,因为只要在另一个Git中存在该名称,它就会继续出现。然而,一旦你已经从其他Git中删除了错误的名称——这可能需要外部帮助,例如来自GitHub的人员——git fetch --prune可能也无法在你自己的存储库中丢弃远程跟踪名称。(尝试首先执行此操作。)

考虑到您的操作系统不允许您为该名称创建锁定文件,您需要手动删除正确的条目,这将是您的.git/packed-refs文件中的一行。使用一个只能处理换行符结尾的文本文件编辑器(而不是富文本编辑器),并删除该行。


谢谢你的回答。我正在使用Mac OS。终端支持Unicode。所以对于我来说,无论是键入cli还是通过sh脚本运行,结果应该是相同的。我尝试了vim创建的脚本。错误是一样的。如果我错了,请纠正我。 - Marckaraujo
在这种情况下,可能上游分支已经被删除了,您只需要运行 git fetch -p (如果失败,请运行 vim .git/packed-refs 并删除错误的行)。 - torek
它没有被删除,因为我仍然可以在 GitHub 仪表板中访问它。您可以使用此 Unicode 创建一个新分支,它将以相同的方式失败。 - Marckaraujo
有趣。你可能需要联系GitHub支持来删除它。 - torek

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