如何删除已推送的Git标记?
当前回答
gitpush--delete origin$TAGNAME是正确的方法(除了本地删除之外)。
但是:确保使用Git 2.31+(2021第一季度)。
“git-push$there--delete”(man)本应被诊断为一个错误,但却变成了一个匹配的push,已使用git 2.31(2021第1季度)进行了更正。
参见Junio C Hamano(gitster)提交的20e4164(2021 2月23日)。(由Junio C Hamano——gitster——于2021 2月25日提交1400458合并)
push:不要将--delete“”转换为匹配的push通知人:Tilman Vogel
当我们将语法糖“git push remote--delete”(man)<ref>添加到“git推送”(man)中,作为标准git pushremote(man)的同义词:语法在f517f1f(“内置推送:add(man)--delete as syntax sugar for:foo”,2009-12-30,git v1.7.0-rc0--merge)中时,我们没有足够谨慎地确保<ref>不为空。盲目地将“--delete<ref>”重写为“:<ref>“意味着空字符串<ref>将导致refspec“:”,这是要求“匹配”推送的语法,但不删除任何内容。更糟糕的是,如果有匹配的引用可以快速转发,那么即使用户觉得它们还没有准备好推出,它们也会过早发布,这将是一场真正的灾难。
其他回答
我只是想分享我创建的别名,它做了同样的事情:
将以下内容添加到~/.gitconfig中
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
git push --delete origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
用法如下:
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)
请注意,如果您有一个名为远程标记的远程分支,那么这些命令是不明确的:
git push origin :tagname
git push --delete origin tagname
因此,必须使用此命令删除标记:
git push origin :refs/tags/<tag>
这一个删除分支:
git push origin :refs/heads/<branch>
如果没有,则会出现如下错误:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
删除本地标记“12345”
git tag -d 12345
删除远程标记“12345”(例如,GitHub版本也是)
git push origin :refs/tags/12345
替代方法
git push --delete origin tagName
git tag -d tagName
其他答案指出了如何实现这一点,但您应该记住后果,因为这是一个远程存储库。
git标签手册页的On Retagging部分很好地解释了如何礼貌地将更改通知远程回购的其他用户。他们甚至提供了一个方便的公告模板,用于传达其他人应该如何获得您的更改。
似乎xargs已经做了很多工作。回顾这篇文章,我猜你所经历的xargs的缓慢是因为最初的答案使用了xargs-n 1,而实际上并不需要。
除了xargs自动处理最大命令行长度之外,这与方法1等效:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs也可以并行运行进程。使用xargs的方法2:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
上面最多使用5个进程来处理每个进程中最多100个参数。你可以尝试这些论点,以找到最适合你的需求的东西。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别