Remove old remote branches from Git

git

Solution

Git does not delete the (local) remote-tracking branches automatically if the branch was deleted in the remote repository. Additionally, before V2.0.1 remote-tracking branches were in some cases not deleted when you removed the remote from your git config (see VonC's answer).

To delete stale remote-tracking branches (branches that were deleted in the remote repository) for one of your remote repositories, run

git remote prune <remote>

To cite the man page or `git remote`:

prune

Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".

With --dry-run option, report what branches will be pruned, but do not actually prune them.

However, from your question it seems you manually removed `.git/refs/remotes/theoldremote`, so Git no longer knows about the remote repository that the remote-tracking branches belonged to. That's not how you're supposed to do it.

The normal way to remove a remote repository is to run

git remote rm <remote>

This will remove the remote from your `.git/config`, and will delete the remote-tracking branches.

If you just delete the directory under `.git/refs/remotes/`, the branches will remain behind. Then you will need to remove them manually:

git branch -rd <remote>/<branchname>

You need option `-r` to delete a remote branch.

Problem

When I use bash autocompletion in Git, it keeps showing me branches of old remotes that I don't have anymore. When I do a `git branch -la` it shows those old remotes and branches while a `git branch -l` won't. A `ls .git/refs/remotes/` also shows them. However, they are not present in my .git/config and neither are they shown when I run `git remote show`. So how do I get rid of them because my autocomplete list is too long right now. I have already tried: ``` git reflog expire --expire=now --all git gc --prune=now rm .git/refs/remotes/theoldremote git remote prune theoldremote ``` I'm also aware of the fact that I can just re-clone the repo but that's just cheating ;-)

Original source

Related problems