Delete multiple git branches at once

Cleaning up your local branches is one of my, somewhat boring, recurring tasks. Especially for projects with multiple developers(and running git fetch often) my list of local branches gets quite large.

To remove a git branch you use the git branch -D <branch_names> command. You can pass multiple branch names to this command, separated by a space. Unfortunately git branch -D doesn’t allow globbing patterns, unlike the rm command for example.

The tab completion in Zsh already goes a long way in making deleting multiple branches faster. But we can do better. With git branch --format "%(refname:short)" | grep "<pattern>" | xargs git branch -D we can use the grep command to specify a pattern for the branch names.

Look at the following for example, which removes git branches with names starting with fix/.

$ git branch --format "%(refname:short)" | grep "^fix/*" | xargs git branch -D

If you rather have some security first you can run the following command first, which displays the list of branches without deleting them.

$ git branch --format "%(refname:short)" | grep "^fix/*"

Removing local branch with prune

Another option would be to use prune. With prune you prune away the branches that don’t exist on the remote anymore. So the local branches that are not present on the remote repository anymore will be deleted.

$ git remote prune origin

See Also

6 Non-Programming Books for Programmers