I'm on a sort of frankendebian stretch/sid (not the best idea, I know; planning on reinstalling soon).

Tab completion works for git branch names in git repo directories:

:~/project $ git checkout <TAB><TAB>
Display all 200 possibilities? (y or n)

:~/project $ git checkout private-rl_<TAB><TAB>
private-rl_1219_misspelled_locale_zhtw   private-rl_1950_scheduler_offset         private-rl_bootstrap_rake_tasks
private-rl_1854_ldap_filter_reset        private-rl_bootstrap_rake_task

But some of the branches it shows don't exist anymore:

:~/project $ git branch
* develop

This also happens for deleted remote branches.

What's going on here? Does the git completion script keep a cache of old branches that can be flushed somehow? How can I stop these branches from accumulating in my tab-completion results?

  • Are you sure they are not tags? Autocompletion takes into account tags, and many other things. See top comments on github.com/git/git/blob/master/contrib/completion/… May 3, 2018 at 13:24
  • I'm 100% sure they're not tags. I created and deleted those branches myself. Weird though — I just did $ sudo fd --hidden --no-ignore git-completion /, and didn't get any results.
    – Ryan Lue
    May 3, 2018 at 14:04
  • Do git branch -a to see all branches. Remote branches may be taken into account also. May 3, 2018 at 14:09
  • Thanks, it was references to deleted remotes (see answer below).
    – Ryan Lue
    May 3, 2018 at 14:30

3 Answers 3


I figured it out, thanks to some gentle prodding from @PatrickMevzek:

The branches I was seeing were actually references to remote branches that had already been deleted. To quote the top answer from the SO thread linked above,

$ git remote prune origin

fixed it for me.


Depending on your setup, there is another source of what might look like old or deleted branches - your git-completion may also be suggesting tags along with branches.

I was fooled by this recently - our CI/CD pipeline tags all our builds, and even though certain branches would be released and/or deleted years ago, the tags persisted. Cleaning up old tags on the remote was the solution here (there is a guide here.


git(1) comes with contributed files in git/contrib/completion/ in the source. The script for your shell handles completions.

  • I appreciate the sentiment, but the script as linked by @PatrickMevzek above is already over 3,000 lines long. If I had all day to read through git-completion.bash, well, I'd probably take my dogs for a hike instead anyway.
    – Ryan Lue
    May 3, 2018 at 14:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.