How to Delete a Remote Tag?
How Do You Delete a Git Tag That Has Already Been Pushed? 27 Answers You Can Push an 'Empty' Reference to the Remote Tag Name: Git Push Origin: Tagname Or...
How do you delete a Git tag that has already been pushed?
27 Answers
You can push an 'empty' reference to the remote tag name:
git push origin :tagname
Or, more expressively, use the --delete option (or -d if your git version is older than 1.8.0):
git push --delete origin tagname
Note that git has tag namespace and branch namespace so you may use the same name for a branch and for a tag. If you want to make sure that you cannot accidentally remove the branch instead of the tag, you can specify full ref which will never delete a branch:
git push origin :refs/tags/tagname
If you also need to delete the local tag, use:
git tag --delete tagname
Background
Pushing a branch, tag, or other ref to a remote repository involves specifying "which repo, what source, what destination?"
git push remote-repo source-ref:destination-ref
A real world example where you push your master branch to the origin's master branch is:
git push origin refs/heads/master:refs/heads/master
Which because of default paths, can be shortened to:
git push origin master:master
Tags work the same way:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Which can also be shortened to:
git push origin release-1.0:release-1.0
By omitting the source ref (the part before the colon), you push 'nothing' to the destination, deleting the ref on the remote end.
A more straightforward way is
git push --delete origin YOUR_TAG_NAME
IMO prefixing colon syntax is a little bit odd in this situation
If you have a remote tag v0.1.0 to delete, and your remote is origin, then simply:
git push origin :refs/tags/v0.1.0
If you also need to delete the tag locally:
git tag -d v0.1.0
See Adam Franco's answer for an explanation of Git's unusual : syntax for deletion.
Delete all local tags and get the list of remote tags:
git tag -l | xargs git tag -d
git fetch
Remove all remote tags
git tag -l | xargs -n 1 git push --delete origin
Clean up local tags
git tag -l | xargs git tag -d
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
The first line deletes your_tag_name from local repo and second line deletes your_tag_name from remote repo.
For those who use GitHub, one more step is needed: discarding draft.
From your terminal, do this:
git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Now go to Github.com and refresh, they disappear.
git push --delete origin $TAGNAME is the correct approach (in addition of a local delete).
But: make sure to use Git 2.31.
"git push $there --delete"(man) should have been diagnosed as an error, but instead turned into a matching push, which has been corrected with Git 2.31 (Q1 2021).
See commit 20e4164 (23 Feb 2021) by Junio C Hamano (gitster).
(Merged by Junio C Hamano -- gitster -- in commit 1400458, 25 Feb 2021)
Must Read
push: do not turn --delete '' into a matching pushNoticed-by: Tilman Vogel
When we added a syntax sugar "
git push remote --delete"(man)<ref>to "git push"(man) as a synonym to the canonicalgit push remote(man) : syntax at f517f1f ("builtin-push:add(man)--deleteas syntactic sugar for :foo", 2009-12-30, Git v1.7.0-rc0 -- merge), we weren't careful enough to make sure that<ref>is not empty.Blindly rewriting "--delete " to ":" means that an empty string
<ref>results in refspec ":", which is the syntax to ask for "matching" push that does not delete anything.Worse yet, if there were matching refs that can be fast-forwarded, they would have been published prematurely, even if the user feels that they are not ready yet to be pushed out, which would be a real disaster.
To remove the tag from the remote repository:
git push --delete origin TAGNAME
You may also want to delete the tag locally:
git tag -d TAGNAME
Delete local tag '12345'
git tag -d 12345
Delete remote tag '12345' (eg; GitHub version too)
git push origin :refs/tags/12345
alternative approach
git push --delete origin tagName
git tag -d tagName
Just notice that, if you have a remote branch named as a remote tag, these commands are ambiguous:
git push origin :tagname
git push --delete origin tagname
So you must use this command to delete the tag:
git push origin :refs/tags/<tag>
and this one to delete the branch:
git push origin :refs/heads/<branch>
If not, you would get an error like this:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
This two steps works fine:
# 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