Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Git存储库中删除所有标记_Git_Git Tag - Fatal编程技术网

从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存储库中删除所有标记。我该怎么做

使用
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.*")
分解并解释上述陈述:

  • 列出带有前缀的所有标记

    git标签-l“v0.0.*”

  • 删除标签的步骤

    git tag-d$tag\u名称 这就是该声明的工作原理


  • 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次