如何删除已经推送的 Git 标签?
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
您可以推送对远程标记名称的“空”引用:
git push origin :tagname
或者,更明确地说,使用 --delete 选项(如果您的 git 版本早于 1.8.0,则使用 -d):
git push --delete origin tagname
请注意,git 具有标签命名空间和分支命名空间,因此您可以为分支和标签使用相同的名称。如果要确保不会意外删除分支而不是标记,可以指定永远不会删除分支的完整 ref:
git push origin :refs/tags/tagname
如果您还需要删除本地标签,请使用:
git tag --delete tagname
背景
将分支、标签或其他引用推送到远程存储库涉及指定“哪个存储库、什么源、什么目标?”
git push remote-repo source-ref:destination-ref
将 master 分支推送到源的 master 分支的真实示例是:
git push origin refs/heads/master:refs/heads/master
由于默认路径,可以缩短为:
git push origin master:master
标签的工作方式相同:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
也可以缩短为:
git push origin release-1.0:release-1.0
通过省略源引用(冒号之前的部分),您将“无”推送到目标,删除远程端的引用。
+1 用于回答问题和解释一般情况,并详细说明未删节语法的含义
万一有人想知道如何一次删除多个标签,您可以使用空格简单地列出它们,例如 git push --delete origin tag1 tag2。同样适用于本地标签删除 git tag -d tag1 tag2
如果标签名称与分支名称冲突,您最终可能会删除您的分支。哈哈。看第二个答案 - 它更生态
有趣的是,git tag -d git tag将删除所有本地标签。假设您在本地提取远程标签,同样适用于 git push --delete origingit tag。这在测试环境中很方便。
事实上,我们获得了 6700 多票,而且它如此复杂,这可能意味着它可以重新设计。
huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。
更直接的方法是
git push --delete origin YOUR_TAG_NAME
在这种情况下,IMO 前缀冒号语法有点奇怪
我认为这是正确的方法......其他语法对我来说更像是黑客。
这行得通。一个补充:如果你有一个分支和一个同名的标签,你可以在你的标签名称前加上单词 tag 以确保你得到的是标签,而不是分支。
@andypaxo 该命令采用的是 refspecs,正确的方法是在标签前加上 refs/tags/,如下所示:refs/tags/v2.3.1。
我以某种方式在远程服务器上创建了“坏”标签名称,它有特殊字符,所以我无法与之同步,所以只需根据您的建议将其删除: git push --delete origin "service---- 151" ,不能用intellij、不能用stash、不能用sourceTree来删除它。谢谢 !
对于那些在答案发布很久之后阅读这篇文章的人,当时(现在接受的)答案中没有此内容;后来这个答案的内容被(非常狭窄地)建议编辑到接受的内容中。这是堆栈溢出的“最佳答案上升到顶级系统”有点失败的那些奇怪的边缘案例之一,一方面我很高兴接受的答案具有正确的信息,因为大多数读者不会看过去的最佳答案,但我对我们如何到达这里并不感到兴奋......我希望未来的读者不会认为这个答案只是复制/粘贴。
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
如果您有要删除的远程标记 v0.1.0,而您的远程是 origin,那么只需:
git push origin :refs/tags/v0.1.0
如果还需要在本地删除标签:
git tag -d v0.1.0
有关 Git 用于删除的异常 : 语法的说明,请参阅 Adam Franco’s answer。
这也适用于 jgit。 :tag 速记不适用于 jgit
我得到了fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1 ...?
@ChaimEliyah 你有一个斜线,也许这是你的问题
更好的答案,因为如果您有一个分支和一个称为相同的标签,这也有效。
只有 :tagname 应该适用于远程删除。
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
删除所有本地标签并获取远程标签列表:
git tag -l | xargs git tag -d
git fetch
删除所有远程标签
git tag -l | xargs -n 1 git push --delete origin
清理本地标签
git tag -l | xargs git tag -d
如何从本地和远程仓库中删除所有标签。这就是我要找的,谢谢!
git fetch,删除远程,然后清理本地,效果很好!
慢,但最直接
但是,当另一个执行 git-push 时,将保留所有已删除的标签
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
第一行从 local 存储库中删除 your_tag_name,第二行从 remote 存储库中删除 your_tag_name。
https://i.stack.imgur.com/IoCnD.jpg
huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。
从您的终端执行以下操作:
git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
现在去 Github.com 刷新一下,它们就消失了。
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
git push --delete origin $TAGNAME 是正确的方法(除了本地删除)。
但是:确保使用 Git 2.31。
“git push $there --delete”(man) 应该被诊断为错误,但却变成了匹配的推送,已在 Git 2.31(2021 年第一季度)中更正。
请参阅 Junio C Hamano (gitster) 的commit 20e4164(2021 年 2 月 23 日)。 (由 Junio C Hamano – gitster – 在 commit 1400458 中合并,2021 年 2 月 25 日)
push:不要将 --delete ‘’ 变成匹配的 push 通知者:Tilman Vogel
当我们添加语法糖 “git push remote --delete”(man) 到 “git push”(man) 作为规范 git push remote(man) 的同义词时:语法在 f517f1f (“builtin-push: add(man) --delete 作为 :foo” 的语法糖,2009-12-30,Git v1.7.0-rc0 – merge),我们没有足够小心以确保 不为空。盲目地将“–delete”重写为“:”意味着一个空字符串 会导致 refspec “:”,这是请求“匹配”推送的语法,它不会删除任何内容。更糟糕的是,如果有匹配的 ref 可以快进,即使用户觉得他们还没有准备好被推出,它们也会过早发布,这将是一场真正的灾难。
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
要从远程存储库中删除标签:
git push --delete origin TAGNAME
您可能还想在本地删除标签:
git tag -d TAGNAME
所以一条线来做这两个:git push --delete origin TAGNAME && git tag -d TAGNAME
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
删除本地标签“12345”
git tag -d 12345
删除远程标签“12345”(例如;GitHub 版本)
git push origin :refs/tags/12345
替代方法
git push --delete origin tagName
git tag -d tagName
https://i.stack.imgur.com/zTijy.png
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
这两个步骤工作正常:
# 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
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
请注意,如果您有一个名为远程标记的远程分支,则这些命令是不明确的:
git push origin :tagname
git push --delete origin tagname
所以你必须使用这个命令来删除标签:
git push origin :refs/tags/
而这个删除分支:
git push origin :refs/heads/
如果没有,您将收到如下错误:
error: dst refspec matches more than one.
error: failed to push some refs to ''
简明扼要。这篇文章与 MeganZhou 一起弹出,作为我们遇到问题的答案,分支名称和标记名称是相同的。我删除了本地标签并推送到 :refs/tags ,一切都很好。
原文链接:https://www.huntsbot.com/qa/ma7v/how-do-i-delete-a-remote-tag?lang=zh_CN
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html