-
-
Save okunishinishi/9424779 to your computer and use it in GitHub Desktop.
When I run git push origin --delete $(git tag -l) # Pushing once should be faster than multiple times
, I get the following error. Any suggestions on how to fix this?
Error:
fatal: --delete doesn't make sense without any refs
When I run
git push origin --delete $(git tag -l) # Pushing once should be faster than multiple times
, I get the following error. Any suggestions on how to fix this?Error:
fatal: --delete doesn't make sense without any refs
You don't have local tags to reference.
Run following:
#Fetch remote tags.
git fetch
#Delete remote tags.
git push origin --delete $(git tag -l)
#Delete local tags.
git tag -d $(git tag -l)
nice, The "git tag -l | xargs git tag -d" in the example above might work better with "grep "
if any of the remote tags do not exist, the delete all approach bails out!
This will get the tags that are on the remote 'origin', then delete those tags:
git ls-remote --tags origin | cut -f 2 | xargs git push --delete origin
to delete refs as well:
git ls-remote origin | cut -f 2 | grep -iv head | xargs git push --delete origin
I didn't find a solution anywhere that didn't requre a single git push
call per tag, so I came up with this variant, which - in my case - reduced the runtime from several hours to several seconds:
git push --delete origin $( git ls-remote --tags origin | awk '{print $2}' | grep -Ev "\^" | tr '\n' ' ')
Explanation
git push --delete origin $(...)
: Deletes a tag (or multiple) on origin$( git ls-remote --tags origin | awk '{print $2}' | grep -Ev "\^" | tr '\n' ' ')
: Creates a space delimited string of all tagsgit ls-remote --tags origin
: Prints all tags on the remote origin... | awk '{print $2}' | ...
: Only prints the second column of the previous command output... | grep -Ev "\^" | ...
: Filters out unwantedrefs/tags/mytag^{}
variants (not sure where they come from)... | tr '\n' ' '
: Converts the list into a space delimited string
It takes advantage of the fact that you can provide multiple tag names in a space delimited string, so it only invokes git delete
once.
YMMV (use carefully):
deletes all (locally known) tags on remote named 'origin'
git push origin $(git tag -l --format=':%(refname)')
you may want to delete the tags locally also, or you might push them again:
git tag -d $(git tag -l)
Worked wonders thanks!
thanks