从Git存储库中删除所有标记
我想从Git存储库中删除所有标记。我该怎么做 使用从Git存储库中删除所有标记,git,git-tag,Git,Git Tag,我想从Git存储库中删除所有标记。我该怎么做 使用git tag-d标记名在本地删除标记名tagname,并使用git push--tags更新git提供程序上的标记 我试过: git tag -d * 但是我看到*表示当前目录中的文件 $ git tag -d * error: tag 'file1' not found. error: tag 'file2' not found. ... 考虑到我有很多标签,我想全部删除它们 git tag | xargs git tag -d 只需按
git tag-d标记名
在本地删除标记名tagname
,并使用git push--tags
更新git提供程序上的标记
我试过:
git tag -d *
但是我看到*
表示当前目录中的文件
$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...
考虑到我有很多标签,我想全部删除它们
git tag | xargs git tag -d
只需按照你的管道,一切
在Windows上,使用git bash和相同的命令。要删除远程标记(在删除本地标记之前),只需执行以下操作:
git tag -l | xargs -n 1 git push --delete origin
然后删除本地副本:
git tag | xargs git tag -d
对于windows用户:
这将通过运行git tag并将该列表提供给git tag-d来删除所有本地标记:
FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a
(位于:)对于使用PowerShell的Windows用户:
git tag | foreach-object -process { git tag -d $_ }
通过对返回的每一行执行
git tag-d
,可以删除由git tag
返回的所有标记。在一个命令中推式删除所有标记可能更有效。特别是如果你有几百个
在合适的非windows外壳中,删除所有远程标记:
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
可能还有其他方法可以获取行列表,用引号将它们括起来,使它们成为一行,然后将该行传递给命令。考虑到这是最终的猫剥皮环境和所有。补充了Stefan的答案,即缺少如何从远程删除标签。对于windows powershell,您可以运行此操作,首先删除远程标记,然后删除本地标记
git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }
您还可以使用:
git tag -d $(git tag)
如果本地repo中没有标记,则可以删除远程标记,而无需将其带到本地repo
git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete
不要忘记将“origin”替换为您的远程处理程序名称。由于所有这些选项都只在linux中工作,因此,对于需要处理这些问题的任何人,这里提供了windows等效选项:
FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t
我必须删除带有前缀的标签 例如,我必须删除标签v0.0.1、v0.0.2、v0.0.3、v0.0.4、v0.0.5
git tag -d $(git tag -l "v0.0.*")
分解并解释上述陈述:
Powershell v7支持并行foreach,前提是您有许多需要删除的上游(原点)标记:
git标记| foreach对象-并行{
git推送源--删除$\u
git标签-d$\u
}
显示包含“v”的所有标记
git标签-l | grep v | xargs-n1 sh-c'echo“处理标签$0\n”和&git show-s$0”
谢谢。此命令删除本地标记。我使用了git tag-l | xargs-n1 git push--delete origin
从远程删除它们。@CoDEmanX在Windows上您应该使用git bash和相同的命令。不删除远程标记,对于数千个标记也非常慢。@AdrianBaker也许您可以增加-n
之后的数字以进行并行化。我不确定这种方法是否安全,尽管“xargs”在windows 10I上未被识别为内部或外部命令,但我有数千个标记,从远程云repo中逐个删除它们需要几天时间,这一问题得到了解决。xargs-L 1
做什么?-L max line--max line[=max line]-L[max line]每个命令行最多使用最大行非空输入行。对于'-l',如果省略,则最大行数默认为1。对于'-L',该参数是必需的。尾随空格导致一个输入行在逻辑上连续到下一个输入行,以便对行进行计数。暗示'-x'。此选项的'-l'形式已被弃用,取而代之的是与POSIX兼容的'-l'选项@理查兹:好的,但这对答案有什么影响呢git-tag
返回标记,每行一个,然后xargs-L 1
每行输出一个,这是为什么呢?嗯,在这种情况下似乎什么都没有!除了让事情变得更慢!远程删除对于几十个标记来说太慢了。如果您有很多远程标记,这个答案会快得多:这个答案中的命令顺序假定没有仅本地的标记。这个速度太慢了,下面的解决方案更好。如果您需要为提交输入密码短语,则每个标记都需要密码短语。另一个解决方案更好。太好了!这一次就把它们全部删除了。另一个命令是每2秒删除一个。如果你有很多标记,比如千,那么这个命令就不起作用了。在这种情况下,你可以使用git tag-d$(git tag | head-n999)这样的命令并执行x次