从Git存储库中删除所有标记

时间:2013-10-23 12:55:15

标签: git git-tag

我想删除Git存储库中的所有标记。我怎么能这样做?

使用git tag -d tagname在本地删除标记tagname,并使用git push --tags更新git提供程序上的标记。

我试过了:

git tag -d *

但我发现*表示当前目录中的文件。

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

考虑我有很多标签,我想删除所有标签。

12 个答案:

答案 0 :(得分:339)

git tag | xargs git tag -d

只需使用管理所有内容的Linux哲学。在Windows上使用git bash和相同的命令。

答案 1 :(得分:150)

要删除远程标记(删除本地标记之前),只需执行以下操作:

git tag -l | xargs -n 1 git push --delete origin

然后删除本地副本:

git tag | xargs git tag -d

答案 2 :(得分:39)

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

在合适的非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

获取行列表,将它们包装在引号中,使它们成为单行,然后将该行传递给命令的其他方法可能存在。考虑到这是最终的猫皮肤环境和所有。

答案 3 :(得分:21)

对于使用PowerShell的Windows用户:

git tag | foreach-object -process { git tag -d $_ }

通过对返回的每一行执行git tag,删除git tag -d返回的所有标记。

答案 4 :(得分:21)

添加了Stefan的答案,该答案忽略了如何从远程删除标签。对于Windows PowerShell,您可以运行此命令首先删除远程标记,然后删除本地标记。

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

答案 5 :(得分:11)

如果您没有本地仓库中的标签,则可以删除远程标签,而无需将其转移到本地仓库。

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

别忘了更换" origin"到您的远程处理程序名称。

答案 6 :(得分:10)

对于Windows用户:

这会删除所有本地标记,方法是运行git标记并将该列表提供给git tag -d:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(发现于:https://gist.github.com/RandomArray/fdaa427878952d9768b0

答案 7 :(得分:5)

您也可以使用:

git tag -d $(git tag)

答案 8 :(得分:1)

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

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

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

分解并解释以上陈述:

  1. 列出所有带前缀的标签

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

  2. 删除标签

    git标签-d $ tag_names 那条语句就是这样

答案 9 :(得分:1)

如果您有许多需要删除的上游(原始)标签,Powershell v7支持并行foreach:

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}

答案 10 :(得分:0)

由于所有这些选项仅适用于linux,因此这里的窗口等同于任何必须处理的人:FOR /F usebackq %t IN ( git tag ) DO @git tag --delete %t

答案 11 :(得分:0)

显示所有包含“ v”的标签

#include <iostream>
#include <tuple>

struct foo {
    foo() = default;
    foo(const foo&) = delete;            // not copyable for the sake of this demo
    foo(foo&&) = default;                // but moveable
    foo& operator=(const foo&) = delete;
    foo& operator=(foo&&) = default;

    int a;
};

int main() {
    foo w, x, y{3}, z{4};
    
    std::tie(w, x) = std::tuple(std::move(y), std::move(z));

    std::cout << w.a << x.a << '\n';     // prints 34
}