Here is a command that you can use to delete all the branches that have been merged to master
branch from both local and remote using just one command. Instead of deleting branch one by one, I use below commands to delete all the branches that have been merged.
Delete local merged branches:
git branch --merged master | egrep -v "(^\*|master|dev)" | xargs -n 1 git branch -d
Delete remote merged branches:
git branch -r --merged master | egrep -v "(^\*|master|dev)" | cut -d/ -f2- | xargs -n 1 git push --delete origin
You can change branch name from master to any other branch name that you refer to as your main branch.
Also you can use it as alias by adding it in .bashrc file.
alias gclb='git branch --merged master | egrep -v "(^\*|master|dev)" | xargs -n 1 git branch -d'
alias gcrb='git branch -r --merged master | egrep -v "(^\*|master|dev)" | cut -d/ -f2- | xargs -n 1 git push --delete origin'
It has been a lot easier for me to use it this way. If you do it differently or have better way please comment below.
Top comments (4)
Or as I prefer it, part of
.gitconfig
:Then:
Thanks for sharing!
Your "cut" step is not working for a branch name "feature/HCB-446-sonar-workflow".
But "git branch --merged | egrep -v "(^*|master|main|dev)" | xargs git branch -d" works.
Thanks for pointing out @deniscloudgeek, indeed the cut command is not needed when deleting local branches.
However, it is needed when deleting remote branches - removes origin/ from branch name.
Updated!
Hi! Great tips, thanks for sharing! :)