Search code examples
gitgit-tag

How can I delete a remote tag?


How can I delete a Git tag that has already been pushed?


Solution

  • 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.