As of git 1.9.4, it appears that there is no easy way to remove local tags
that don’t exist on remote (a.k.a “stale tags”). According
to --prune option in git fetch documentaiton :
Tags are not subject to pruning if they are fetched only because of the default tag auto-following or due to a
--tagsoption. However, if tags are fetched due to an explicit refspec (either on the command line or in the remote configuration, for example if the remote was cloned with the--mirroroption), then they are also subject to pruning..
To put it simple, if you are trying to do something like git fetch -p -t,
it will not work starting with git version 1.9.4.
However, there is a simple workaround that still works in latest versions:
$ git tag -l | xargs git tag -d # remove all local tags
$ git fetch -t # fetch remote tags
A one liner can be written as:
$ git tag -l | xargs git tag -d && git fetch -t
Alternative, you can add a new alias to your ~/.gitconfig file to make things
shorter:
# in ~/.gitconfig
[alias]
... ... ... # your existing aliases
pt = !git tag -l | xargs git tag -d && git fetch -t
Now, you can simply call pt alias to prune local stale tags:
$ git pt
Follow @demisx1 for more tips and best practices.
Today my environment was:
- Git 1.2.1
- Mac OS X 10.10