【问题标题】:Unable to delete git remote branch with a special character无法删除带有特殊字符的 git 远程分支
【发布时间】:2020-09-21 10:54:16
【问题描述】:

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

如果你列出分支,它看起来像这样:

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

分支名称是:

origin/feat/verify-√email

如果您尝试从 Github Dashboard 访问分支 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 之类的工具进行删除,也不起作用。

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

【问题讨论】:

  • @Renat,尝试了解决方案,但也给出了错误。我会更新问题。
  • 您是否有机会通过 UI在远程(如 github、gitlab 等)来做到这一点?
  • @JakeParis,我尝试使用 Sourcetree。它还会给出未找到的错误。
  • 是的,但是 SourceTree 不是本地应用程序吗?我在想也许远程 UI 可以更好地处理分支名称中的特殊字符。

标签: git command-line-interface git-branch


【解决方案1】:

我从您的帖子中剪切和粘贴的 字符是平方根的 Unicode 字符:U+221A — 另请参阅 https://en.wikipedia.org/wiki/Radical_symbol。实际上在另一个 Git 中的那个似乎是某些非 Unicode 字符集中的代码字节 C3。您需要让其他 Git 以某种方式将其删除。

git push --delete 是个好主意,但您必须将确切的字节序列发送到另一个 Git。我不清楚如何从您使用的任何终端会话中做到这一点。如果您在 MacOS 上,您可以编辑一个具有正确字节序列的 shell 脚本文件:只需运行 git branch -r &gt; /tmp/script,在合适的编辑器中打开文件(例如,vim),删除所有不相关的行,然后将git push origin --delete 插入到带有坏名的剩余一个前面。然后运行生成的脚本,例如sh /tmp/script。在没有人手(或编辑器)接触行中的字节的情况下,原始字节码序列应保持在原位。

使用git branch -d -r 将,即使它有效,也没有真正的帮助,因为只要它存在于其他 Git 中,名称就会不断出现。然而,一旦你摆脱了另一个 Git 上的坏名字——这可能需要外部帮助,例如来自 GitHub 的人——git fetch --prune 可能也无法在你自己的存储库中丢弃远程跟踪名称. (不过还是先试试吧。)

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

【讨论】:

  • 感谢您的回答。我正在使用 Mac 操作系统。终端支持 Unicode。所以对我来说,输入cli或通过sh脚本运行,结果应该是一样的。我尝试了 vim 创建的脚本。错误是一样的。如果我错了,请纠正我。
  • 在这种情况下,可能上游分支已经被删除,你只需要运行git fetch -p(如果失败,运行vim .git/packed-refs并删除坏行)。
  • 它没有被删除,因为我仍然可以在 github 仪表板中访问它。你可以用这个 unicode 创建一个新的分支,它会以同样的方式失败。
  • 有趣。那么,您可能必须获得 GitHub 支持才能将其删除。
猜你喜欢
  • 2013-01-07
  • 1970-01-01
  • 2012-08-25
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多