`git remote prune <name>` should "delete all stale remote-tracking branches under <name>". I was surprised to discover, after some troubleshooting, that it also deletes *all* local tags that don't exist on the remote, if the following refspec is included in the remote's fetch config: +refs/tags/*:refs/tags/* So, if `remote.origin.fetch` is configured to fetch all tags from the remote, any tags I create locally will be deleted when running `git remote prune origin`. This is not intuitive [1], nor is is it explained in the docs [2]. Is this behavior obvious to someone with a better understanding of Git internals? I did find a better way to automatically fetch tags (using tagopt instead of adding the fetch refspec). However, the refspec doesn't seem "wrong" in itself; in particular, `git fetch --tags` used to be considered equivalent to specifying the refspec "refs/tags/*:refs/tags/*" -- implying that this is a sensible refspec [3]. So I wouldn't expect it to "break" the behavior of another command. [1] https://stackoverflow.com/q/34687657/1327867 [2] https://git-scm.com/docs/git-remote.html#git-remote-empruneem [3] https://github.com/git/git/commit/c5a84e92a2fe9e8748e32341c344d7a6c0f52a50