Ada*_*nco 5216
您只需要将"空"引用推送到远程标记名称:
git push origin :tagname
Run Code Online (Sandbox Code Playgroud)
或者,更明确地,使用该--delete选项(或者-d如果您的git版本早于1.8.0):
git push --delete origin tagname
Run Code Online (Sandbox Code Playgroud)
如果您还需要删除本地标记,请使用:
git push origin :refs/tags/tagname
Run Code Online (Sandbox Code Playgroud)
将分支,标记或其他引用推送到远程存储库涉及指定"推送位置,源位置,目标位置?"
git tag --delete tagname
Run Code Online (Sandbox Code Playgroud)
将主分支推送到原始主分支的真实示例是:
git push remote-repo source-ref:destination-ref
Run Code Online (Sandbox Code Playgroud)
由于默认路径,可以缩短为:
git push origin refs/heads/master:refs/heads/master
Run Code Online (Sandbox Code Playgroud)
标签的工作方式相同:
git push origin master:master
Run Code Online (Sandbox Code Playgroud)
这也可以缩短为:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Run Code Online (Sandbox Code Playgroud)
通过省略源ref(冒号前的部分),将'nothing'推送到目标,删除远端的ref.
小智 350
更简单的方法是
git push --delete origin YOUR_TAG_NAME
Run Code Online (Sandbox Code Playgroud)
在这种情况下,IMO前缀冒号语法有点奇怪
Ale*_*ean 201
如果您v0.1.0要删除远程标记,并且您的遥控器是origin,则只需:
git push origin :refs/tags/v0.1.0
Run Code Online (Sandbox Code Playgroud)
如果您还需要在本地删除标记:
git tag -d v0.1.0
Run Code Online (Sandbox Code Playgroud)
请参阅Adam Franco的答案,解释Git不寻常:的删除语法.
小智 102
删除所有本地标记并获取远程标记列表:
git tag -l | xargs git tag -d
git fetch
Run Code Online (Sandbox Code Playgroud)
删除所有远程标签
git tag -l | xargs -n 1 git push --delete origin
Run Code Online (Sandbox Code Playgroud)
清理本地标签
git tag -l | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 87
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“:”,这是要求“匹配”推送的语法,不会删除任何内容。更糟糕的是,如果有可以快进的匹配参考,它们就会过早地发布,即使用户觉得它们还没有准备好被推出,这将是一场真正的灾难。
Ign*_*ers 52
这两个步骤效果很好:
# delete local tag '1.0.0'
git tag -d 1.0.0
# delete remote tag '1.0.0' (eg, GitHub version too)
git push origin :refs/tags/1.0.0
Run Code Online (Sandbox Code Playgroud)
And*_*rea 32
要从远程存储库中删除标记:
git push --delete origin TAGNAME
Run Code Online (Sandbox Code Playgroud)
您可能还想在本地删除标记:
git tag -d TAGNAME
Run Code Online (Sandbox Code Playgroud)
Bik*_*kas 26
# Local tag example:
git tag -d v1.0.0
# Remote tag example:
git push -d origin v1.0.0
Run Code Online (Sandbox Code Playgroud)
# Local tag example:
git tag -d v1.0.0 v1.1.0
# Remote tag example:
git push -d origin v1.0.0 v1.1.0
Run Code Online (Sandbox Code Playgroud)
# Local tag example:
git tag -d $(git tag -l "*beta*")
# Remote tag example:
git push -d origin $(git tag -l "*beta*")
Run Code Online (Sandbox Code Playgroud)
Mah*_*alt 25
从您的终端,执行以下操作:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Run Code Online (Sandbox Code Playgroud)
现在去Github.com刷新,它们就消失了.
Lye*_*UKH 16
git tag -d 12345
Run Code Online (Sandbox Code Playgroud)
git push origin :refs/tags/12345
Run Code Online (Sandbox Code Playgroud)
git push --delete origin tagName
git tag -d tagName
Run Code Online (Sandbox Code Playgroud)
kok*_*abi 16
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
Run Code Online (Sandbox Code Playgroud)
第一行your_tag_name从本地存储库中删除,第二行从远程存储库中删除。现在your_tag已从本地和远程回购中完全删除,但是有时您可能需要删除由GitHub在发行版中手动起草的已删除标签。
Ale*_*nte 14
请注意,如果您有一个名为远程标记的远程分支,则这些命令是不明确的:
git push origin :tagname
git push --delete origin tagname
Run Code Online (Sandbox Code Playgroud)
因此,您必须使用此命令删除标记:
git push origin :refs/tags/<tag>
Run Code Online (Sandbox Code Playgroud)
这一个删除分支:
git push origin :refs/heads/<branch>
Run Code Online (Sandbox Code Playgroud)
如果没有,你会得到这样的错误:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
Run Code Online (Sandbox Code Playgroud)
如果您已经创建了一个release01在Git存储库中调用的标记,则可以通过执行以下操作将其从存储库中删除:
git tag -d release01
git push origin :refs/tags/release01
Run Code Online (Sandbox Code Playgroud)
要从Mercurial存储库中删除一个:
hg tag --remove featurefoo
Run Code Online (Sandbox Code Playgroud)
请参考https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
在阅读完这些答案的同时需要删除超过11,000个标签时,我学习了这些方法依赖或xargs花了太长时间,除非你有几个小时的刻录.
挣扎,我发现了两个多更快的方法.对于两者,以git tag或git ls-remote --tags要在遥控器上创建要删除的标签列表.在下面的例子中,你可以省略或替换sorting_proccessing_etc任何grepING,sort荷兰国际集团,tail荷兰国际集团和head荷兰国际集团想要(如 grep -P "my_regex" | sort | head -n -200 等):
xargs,并且一次最少使用几千个标签.git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?正常的,以行分隔的标记列表将转换为单行空格分隔标记,每个标记都:以此为前缀...
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
Run Code Online (Sandbox Code Playgroud)
使用git push此格式标记不会将任何内容推送到每个远程引用中,并将其删除(以这种方式推送的正常格式local_ref_path:remote_ref_path).
在这两种方法之后,您可能也想要删除本地标记.这是更快,所以我们可以回去使用xargs和git tag -d,这已经足够了.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
Run Code Online (Sandbox Code Playgroud)
或类似于远程删除:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
Run Code Online (Sandbox Code Playgroud)
如果您使用SourceTree(出色的Git GUI),则可以通过以下步骤轻松地执行此操作而无需命令行:
现在,您的YOUR_TAG_NAME将从本地存储库和所有远程存储中删除-不管是GitHub,BitBucket还是您作为该存储库的远程存储列出的其他任何位置。
同样,如果您在本地删除了一个标签,但未在远程起点上删除它,并且您想在各处删除它,那么只需创建一个新标签,该标签具有相同的名称,并在与起点相同的提交时附加。然后,重复上述步骤以删除所有地方。
2023 年更新
\n首先,从本地存储库中删除标签。\n要删除本地 Git 标签,请使用git tag带有-d选项的命令。
git tag -d <tag_name>\nRun Code Online (Sandbox Code Playgroud)\n例如,如果您想删除v1.0提交列表中指定的本地标签,则可以运行。
git tag -d v1.0\nRun Code Online (Sandbox Code Playgroud)\n如果删除成功,您可以看到类似以下的输出。
\nDeleted tag 'v1.0' (was 808b598)\nRun Code Online (Sandbox Code Playgroud)\n使用 tag 命令和选项列出现有标签-l,以确保正确删除标签。
git tag -l\nRun Code Online (Sandbox Code Playgroud)\n其次,从远程存储库中删除标记。\n要删除远程 Git 标记,请使用 \xe2\x80\x9cgit push\xe2\x80\x9d 命令和 \xe2\x80\x9c\xe2\x80\x93delete\xe2 \x80\x9d 选项并指定标签名称。
\ngit push --delete origin <tag_name>\nRun Code Online (Sandbox Code Playgroud)\n回到前面的例子,如果你想删除名为\xe2\x80\x9cv1.0\xe2\x80\x9d的远程Git标签,你可以运行。
\ngit push --delete origin v1.0\nRun Code Online (Sandbox Code Playgroud)\n如果删除成功,您可以看到类似以下的输出。
\nTo https://github.com/SCHKN/repo.git\n - [deleted] v1.0\nRun Code Online (Sandbox Code Playgroud)\n要删除远程 Git 标签,请使用该git push命令并使用语法指定标签名称refs。
git push origin :refs/tags/<tag_name>\nRun Code Online (Sandbox Code Playgroud)\n回到示例,要删除名为 的标签v1.0,您将运行。
git push origin :refs/tags/v1.0\n\n\nTo https://github.com/SCHKN/repo.git\n - [deleted] v1.0\nRun Code Online (Sandbox Code Playgroud)\n为什么我们应该指定refs/tags而不是只指定标签名称?
有时,您的标签可能与您的分支具有相同的名称。
\n如果您尝试删除 Git 标签而不指定,refs/tags您将收到以下错误。
git push origin :v1.0\n\n\nerror: dst refspec v1.0 matches more than one.\nerror: failed to push some refs to '<repository>'\nRun Code Online (Sandbox Code Playgroud)\n因此,您需要指定您正在尝试删除 Git 标签而不是 Git 存储库。
\n对于乌龟 git 用户来说,在数百个标签的规模下,您可以使用 UI 一次删除多个标签,但 UI 很好地隐藏在上下文菜单下。
在资源管理器窗口中右键单击 -> 浏览引用 -> 右键单击 ref/refmotes/name -> 选择“删除远程标记”
请参阅https://tortoisegit.org/docs/tortoisegit/tgit-dug-browse-ref.html
其他答案指出了如何实现这一点,但你应该记住后果,因为这是一个远程存储库.
在On Retagging部分中的git tag手册页很好地解释了如何礼貌地通知远程repo的其他用户该更改.他们甚至提供了一个方便的公告模板,用于沟通其他人应该如何获得更改.
正如@CubanX建议的那样,我将这个答案从我原来的内容中分离出来:
xargs调整快几倍的方法,并且可以通过调整进行更多扩展.它使用Github API,一个个人访问令牌,并利用该实用程序parallel.git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
Run Code Online (Sandbox Code Playgroud)
parallel有许多操作模式,但通常并行化您给出的任何命令,同时允许您设置进程数限制.您可以更改--jobs 2参数以允许更快的操作,但我遇到Github的速率限制问题,目前是5000 /小时,但似乎也有未记录的短期限制.
在此之后,您可能也想要删除本地标签.这是更快,所以我们可以回去使用xargs和git tag -d,这已经足够了.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
Run Code Online (Sandbox Code Playgroud)
我想删除所有标签,除了那些与模式匹配的标签,这样我就可以删除除了最后几个月的生产标签之外的所有标签,这是我以前取得的巨大成功:
删除所有远程标记并从删除中排除表达式
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
Run Code Online (Sandbox Code Playgroud)
删除所有本地标记并从删除中排除表达式
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
Run Code Online (Sandbox Code Playgroud)
小智 5
简单的脚本可从本地和原始位置删除给定标签。检查标签是否确实存在。
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git push --delete origin $1
echo done.
else
echo tag named "$1" was not found
fi
Run Code Online (Sandbox Code Playgroud)
如何使用:
$> git-tag-purge.sh tag_name)
如果您使用的是PowerShell,并且要删除其中一堆:
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
Run Code Online (Sandbox Code Playgroud)
当然,您也可以在删除之前过滤它们:
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1083801 次 |
| 最近记录: |