由于特殊字符“Ô,无法删除 GIT 标签

Cannot delete GIT tag because of special character "Ã"

创建了名称中包含“Ô的标签,我无法删除该标签尝试了以下方法:

git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx

git config --global core.precomposeunicode true
git tag -d -- xxÃxx
git push origin :refs/tags/xxÃxx

也尝试用双引号引起来。

执行命令时 git 说标签已删除: 本地删除:

Deleted tag 'xxÃxx' (was 434eae7)

推送后:

remote: warning: Allowing deletion of corrupt ref.
 - [deleted]         xxÃxx

标签 "xxÃxx" 在每次 git fetch -p 或 git pull(连续两次拉取后的事件)时都是新的。

还尝试从源代码树中删除标签,但标签再次出现。

为了停止在每个 pull/fetch 接收标签 'xxÃxx' 作为新标签。我已经克隆了存储库。

我没有找到如何真正删除标签的解决方案,但这对我来说是可以接受的。

特别感谢@VonC。

我可能太固执了,但我想找到一个不涉及删除存储库并再次克隆它的解决方案 - 所以就在这里。

我的错误标签是 ◊v2.2.29.

在 .git/packed-refs 中添加引用对我有用。 只需在 packed-refs 文件中复制(或添加)一行并将标签更改为有问题的标签,格式为:

1ea677c29c1db49a284b3a0b44a5e96fda873da2 refs/tags/◊v2.2.29

您不需要知道该标记的真实对象 ID,但您确实需要一个来自您的项目的有效对象 ID。在我的示例中,1ea677c29c1db49a284b3a0b44a5e96fda873da2 只是我拥有的另一个标签的对象 ID(当然哪个并不重要 - 只需从同一文件的不同行中选择一个),问题就解决了。

旁注: 如果你给出一个根本不存在的对象 id git 要么抱怨它无效,要么继续把它当作一个新标签,这取决于你的结构是否正确。

在类似的情况下,我使用 echoxargs 的组合来删除包含错误 unicode 字符的错误标签 \u0083:

echo -e '\u0083release-1.7.5-hotfix1' |xargs git tag -d
echo -e '\u0083release-1.7.5-hotfix1' |xargs push --delete origin