Delete multiple remote branches in git

I have a team member who inadvertently pushed over 150 of his local branches to our central repo. Thankfully, they all have the same prefix. Using that prefix, is there a git command or cool little shell script I can use that will delete all of those at once?


Use the following command to remove all branches with PREFIX prefix on remote server.

git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}

You may want to do a dry-run first to see if it is the branches that you want to remove:

git branch -r | awk -F/ '/\/PREFIX/{print $2}'

If you like a simpler approach, for instance delete 3 or 4 branches:

git push origin --delete <branch1> <branch2> <branch3>

Important: Only works on Git v1.7.0 and above.


Thanks to Neevek for great and elegant solution!

But i have some troubles with slashes in branch names (i'm using Git Flow), because of awk field separator / (-F option)

So my solution is based on Neevek's, but correctly parses branch names with /. In this case i presume that your remote called origin. Command for deleting remote branches with names staring with PATTERN:

git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}' | xargs -I {} git push origin :{}

And don't forget to check what you are going to delete:

git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}'

USEFUL TIP: If your branch names (without origin/ prefix) stored in a text file (one branch name per line), just run:

cat your_file.txt | xargs -I {} git push origin :{}

This may be a duplicate answer but below tested and worked for me perfectly.

  1. Delete local branch forcefully

git branch -D branch-name

  1. Delete Remote branch

git push origin --delete branch-name

  1. Delete more than 1 local branch

git branch -D branch-name1 branch-name2

  1. Delete more than 1 remote branch

git push origin --delete branch-name1 branch-name2

  1. Delete local branch with prefix. For example, feature/*

git branch -D $(git branch --list 'feature/*')

git branch -D backticks $(git branch --list 'feature/*' backticks)

  1. List remote branch with prefix.

git branch -r | grep -Eo 'feature/.*'

  1. Delete remote branch with prefix

git branch -r | grep -Eo 'feature/.*' | xargs -I {} git push origin :{}