乐闻世界logo
搜索文章和话题

Git 如何删除远程 tag 记录?

9 个月前提问
5 个月前修改
浏览次数93

6个答案

1
2
3
4
5
6

要删除远程仓库中的标签(Tag),您可以使用 git push 命令结合 --delete 选项。这里有一个步骤说明和示例:

步骤 1: 首先,您需要确定要删除的远程标签的名称。您可以通过以下命令查看所有远程标签:

sh
git fetch --tags git tag -l

假设您要删除的远程标签名称为 v1.0

步骤 2: 接下来,您可以使用以下命令删除远程标签:

sh
git push --delete origin v1.0

这里,origin 是您要删除标签的远程仓库的名称(通常情况下远程仓库默认叫做 origin),v1.0 是要删除的标签名称。

示例:

假设我有一个远程仓库,在这个仓库中有一个标签 v1.0,现在我需要删除它。我会这样操作:

  1. 首先,我确认标签存在:

    sh
    git fetch --tags git tag -l

    这会列出所有的标签,确认 v1.0 在列表中。

  2. 然后,我使用命令删除远程标签:

    sh
    git push --delete origin v1.0

    这个命令告诉 Git 我要推送一个删除操作到远程仓库 origin,目标是删除 v1.0 标签。

执行这个命令后,远程仓库中的 v1.0 标签将被删除。也可以使用 :refs/tags/v1.0 这样的语法来指定要删除的标签,但是上面提到的 --delete 选项更加直观易懂。

此外,在进行此类操作之前,通常需要确认您有足够的权限删除远程仓库中的标签,因为在多人协作的项目中,这可能会影响其他人的工作。

2024年6月29日 12:07 回复

您可以将“空”引用推送到远程标记名称:

shell
git push origin :tagname

或者,更具体地说,使用该--delete选项(或者-d如果您的 git 版本早于 1.8.0):

shell
git push --delete origin tagname

请注意,git 具有标签命名空间和分支命名空间,因此您可以对分支和标签使用相同的名称。如果你想确保不会意外删除分支而不是标签,你可以指定 full ref ,它永远不会删除分支:

shell
git push origin :refs/tags/tagname

如果还需要删除本地标签,请使用:

shell
git tag --delete tagname

背景

将分支、标签或其他引用推送到远程存储库涉及指定“哪个存储库、什么源、什么目的地?”

shell
git push remote-repo source-ref:destination-ref

将主分支推送到源的主分支的真实示例是:

shell
git push origin refs/heads/master:refs/heads/master

由于默认路径,可以缩短为:

shell
git push origin master:master

标签的工作方式相同:

shell
git push origin refs/tags/release-1.0:refs/tags/release-1.0

也可以缩短为:

shell
git push origin release-1.0:release-1.0

通过省略源引用(冒号之前的部分),您可以将“无内容”推送到目标,从而删除远程端的引用。

2024年6月29日 12:07 回复

直接的方法:

shell
git push --delete origin YOUR_TAG_NAME
2024年6月29日 12:07 回复

如果您有要删除的远程标签v0.1.0,并且您的远程是origin,那么只需:

shell
git push origin :refs/tags/v0.1.0

如果还需要在本地删除标签:

shell
git tag -d v0.1.0

请参阅Adam Franco的回答:,了解 Git 不寻常的删除语法的解释。

2024年6月29日 12:07 回复

删除所有本地标签并获取远程标签列表

shell
git tag -l | xargs git tag -d git fetch

删除所有远程标签

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

清理本地标签

shell
git tag -l | xargs git tag -d
2024年6月29日 12:07 回复

git push --delete origin $TAGNAME是正确的方法(除了本地删除)。

但是:请确保使用 Git 2.31+(2021 年第一季度)。

git push $there --delete” ( man )应该被诊断为错误,但却变成了匹配的推送,并已在 Git 2.31 (Q1 2021) 中得到纠正。

请参阅Junio C Hamano ( )的提交 20e4164(2021 年 2 月 23 日)。(由Junio C Hamano 合并 -- --提交 1400458中,2021 年 2 月 25 日)gitster
gitster

push: 不变成--delete ''匹配推送

关注者:蒂尔曼·沃格尔

当我们将语法糖“ git push remote --delete” (man<ref>添加到“ git push” (man)作为规范(man)的同义词时: f517f1f处的语法(“ :(man)作为:foo的语法糖”,2009-12-30, Git v1.7.0-rc0 -- merge),我们不够仔细以确保它不为空。git push remotebuiltin-pushadd --delete<ref>

盲目地将“”重写--delete <ref>为“ :<ref>”意味着空字符串<ref>会导致refspec“ :”,这是要求“匹配”推送的语法,不会删除任何内容。

更糟糕的是,如果有可以快进的匹配参考,它们就会过早地发布,即使用户觉得它们还没有准备好被推出,这将是一场真正的灾难。

2024年6月29日 12:07 回复

你的答案