我想从Git仓库中删除所有标签。怎样做?
使用git tag -d 标签名
可以在本地删除标签标签名
,然后使用git push --tags
更新Git服务提供者上的标签。
我尝试了:
git tag -d *
但是我发现*
表示当前目录中的文件。
$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...
考虑我有很多标签,我想全部删除它们。要删除远程标签(在删除本地标签之前),只需执行以下操作:
git tag -l | xargs -n 1 git push --delete origin
然后删除本地副本:
git tag | xargs git tag -d
如果你有几百个标签需要删除,用一个命令来删除所有标签可能会更有效率。
在适当的非 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
可能存在将一组行包裹在引号中,使它们成为单行,然后将该行传递给命令的其他方法。考虑到这是最终的"猫剥皮"环境,应该有多种方法可以实现。
xargs -L 1
是什么意思? - ymettgit tag
会返回标签,每行一个,然后xargs -L 1
将它们逐行输出,那这样做有什么作用? - ymettxargs -L 1
输出所有标签的一行。因此,下一个 xargs
将删除这一行。所以,它不是逐个删除,而是一次性删除所有标签。我甚至用英语写出来了“...一系列行,...将它们变成单行,然后将该行传递给命令...”,但当你问到 xargs -L 1
时,我没有注意到。对此很抱歉。 - Richard A Quadling对于使用 PowerShell 的 Windows 用户:
git tag | foreach-object -process { git tag -d $_ }
执行此命令将通过执行每个返回的行的git tag -d
来删除git tag
返回的所有标签。
git tag | foreach-object -process { git tag -d $_ && git push --delete origin $_ }
。这将逐个删除每个标签,如果有很多标签,可能需要花费一些时间。有没有人知道如何更高效地完成这个任务? - tolache|
替换 &&
。 - Kristoffer Berge如果您的本地repo中没有这些标签,您可以删除远程标签而无需将其带到本地repo。
git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
别忘了将 "origin" 替换成您的远程处理程序名称。
在Stefan的回答中补充一点,即如何删除远程标签。 对于Windows Powershell,您可以运行以下命令首先删除远程标签,然后再删除本地标签。
git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }
要删除所有本地标签,只需运行以下命令
git tag | xargs git tag -d
如果您想删除本地标签后,通过运行上述命令删除远程标签,则可以运行以下命令:
git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
注意:将原始处理器替换为您的远程处理器
fatal: --delete doesn't make sense without any refs
。 - TheRealChx101对于 Windows 用户:
通过运行 git tag 并将其列表传递给 git tag -d,可以删除所有本地标签:
FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a
(来源于:https://gist.github.com/RandomArray/fdaa427878952d9768b0)
git tag -d $(git tag)
我需要删除带有特定前缀的标签。
例如,我需要删除v0.0.1、v0.0.2、v0.0.3、v0.0.4和v0.0.5这些标签。
git tag -d $(git tag -l "v0.0.*")
对上述声明进行分解和解释:
列出所有具有前缀的标记
git tag -l "v0.0.*"
删除标记
git tag -d $tag_names
这就是上述声明的工作原理。
git tag -l | xargs -n 1 git push --delete origin
命令来从远程端删除它们。 - Ionică Bizăugit fetch --all --tags --prune
。 - Akito