Skip to content

Instantly share code, notes, and snippets.

@shsteimer
Created October 31, 2013 21:10
Show Gist options
  • Select an option

  • Save shsteimer/7257245 to your computer and use it in GitHub Desktop.

Select an option

Save shsteimer/7257245 to your computer and use it in GitHub Desktop.
Tip to delete tags by pattern
#delete all the remote tags with the pattern your looking for, ie. DEV-
git tag | grep <pattern> | xargs -n 1 -i% git push origin :refs/tags/%
#delete all your local tags
git tag | xargs -n 1 -i% git tag -d %
#fetch the remote tags which still remain
git fetch
@imsinu9
Copy link
Copy Markdown

imsinu9 commented Aug 2, 2016

git tag | xargs -n 1 -I% git tag -d %

@p00j4
Copy link
Copy Markdown

p00j4 commented Mar 12, 2018

thanks for the tip @shsteimer
a slight change is required:
xargs: illegal option -- i (tested on MAC)

uppercase I solves it.

@chinmaya-kony
Copy link
Copy Markdown

You can try this. It will delete all matching tag patterns.
E.g. for deleting tags starting with v1.0, use git tag -d $(git tag -l "v1.0*")

Delete remote:
git push -d $(git tag -l "tag_prefix*")
Delete local:
git tag -d $(git tag -l "tag_prefix*")

@luwes
Copy link
Copy Markdown

luwes commented Sep 16, 2018

Awesome @chinmaya-kony, this is the easiest I've seen. Thanks!
For the remote an origin is missing I think.
e.g git push -d origin $(git tag -l "*v3.[2]*-beta*")

@trygub
Copy link
Copy Markdown

trygub commented Jan 28, 2019

@luwes
git push origin --delete $(git tag -l "*v3.[2]*-beta*")

@kerryj89
Copy link
Copy Markdown

kerryj89 commented Jan 7, 2021

Run the following command If you get the message delete doesn't make sense without any refs when trying to delete remote tags:

git push origin --delete $(git ls-remote --tags | grep "tag_prefix.*[^}]$" | cut -f 2)

  • git ls-remote --tags will output all remote tags.
  • grep "*tag_prefix.*[^}]$" will ignore tags with annotated dereference operator "^{}" since including them errored out.
  • cut -f 2 keeps the tag name column only

@scottmathews
Copy link
Copy Markdown

scottmathews commented May 5, 2021

I accomplished this in posh-git PowerShell on Windows with this if anyone is needing to do the same:
git tag --list 'v[0-9].[1-9].*' --no-column | % { git tag -d $_; git push origin --delete $_ }

Note that I was specifying all builds from v1.1.0 and up, deleting them locally, and from the remote.

@danielsaidi
Copy link
Copy Markdown

Thank you for all these great commands!

Regarding @kerryj89 's version, you can modify it to work with any remote:

git push upstream --delete $(git ls-remote --tags upstream | grep "tag_prefix.*[^}]$" | cut -f 2)

@leoniralves
Copy link
Copy Markdown

Thanks @kerryj89. This worked fine on macOS! ๐Ÿ‘

@githubtotusharTMA2
Copy link
Copy Markdown

You can try this. It will delete all matching tag patterns. E.g. for deleting tags starting with v1.0, use git tag -d $(git tag -l "v1.0*")

Delete remote: git push -d $(git tag -l "tag_prefix*") Delete local: git tag -d $(git tag -l "tag_prefix*")

Thank You @chinmaya-kony & @luwes.
Thank You All for the help๐Ÿ™๐Ÿป

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment