我想从Git存储库中删除所有标记。我该怎么做呢?

使用git tag -d tagname在本地删除标签tagname,并使用git push——tags更新git provider上的标签。

我试着:

git tag -d *

但是我看到*表示当前目录中的文件。

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

假设我有很多标签,我想全部删除它们。


当前回答

我必须删除带有前缀的标签

例如,我必须删除标签v0.0.1, v0.0.2, v0.0.3, v0.0.4, v0.0.5

git tag -d $(git tag -l "v0.0.*")

分解并解释上面的语句:

列出所有带有前缀的标签 Git标签-l "v0.0.*" 删除标签 Git标记-d $tag_names

这就是这个表述的原理

其他回答

要删除所有本地标签,只需运行以下命令

git tag | xargs git tag -d

如果在执行上述命令删除本地标签后,还需要删除远端标签,可以执行以下命令

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

注意:用远程处理程序替换原点

git tag | xargs git tag -d

简单地遵循Unix哲学,即管道处理所有内容。

在Windows上使用相同的命令使用git bash。

并行化和过滤了最新版本

git tag -l "v1.0.*" | xargs -L 1 | xargs git push origin --delete
git fetch origin --prune --prune-tags

第一行,并行地从remote中删除所有匹配的标记。 第二行,从git v2.26.2版本中删除所有已删除的标记,从而更新当前的repo。

为了测试您可以添加的第一行——dry-run,我还鼓励您探索标记列表命令,它有很好的通配符和排除/包含。

如果你的本地回购中没有这些标签,你可以删除远程标签,而不必把它带到本地回购。

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

不要忘记将“origin”替换为远程处理程序名称。

在一个命令中推删除所有标签可能更有效。特别是如果你有几百个。

在一个合适的非windows shell中,删除所有远程标记:

git tag | xargs -L 1 | xargs git push origin --delete

然后删除所有本地标签:

git tag | xargs -L 1 | xargs git tag --delete

这应该是可以的,只要您的标记名称中没有'。为此,下面的命令应该是可以的。

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

其他获取行列表、用引号将它们括起来、使它们成为一行,然后将该行传递给命令的方法可能存在。考虑到这是终极剥猫皮的环境。