Git Delete Local Branch How to delete all your local branches but keep master

ben profile image Ben Halpern ・1 min read

I find myself searching for this git one-liner a lot, so I figured I'd drop it here to help future searchers:

git branch | grep -v "master" | xargs git branch -D

Happy coding ❤️


markdown guide

Or better, delete everything merged into master, leaving out branches that can contain work in progress

git branch --merged master | grep -v "master" | xargs git branch -D

I was waiting for instructions to rm -fr the project and git clone it again 😉 this is much better!


rm -rf is such a danger. I heard about how dangerous it is, but was oblivious to its power until I deleted a valuable folder!


PowerShell in Windows has slightly different syntax, but you can achieve the same result with the line below :)

git branch | Select-String -NotMatch -Pattern "master" | %{ git branch -D $_.ToString().Trim() }

Thanks, I should definitely look into Powershell a bit more (first time on a contract for a client with a Windows stack)


I mean, this is cool and all, but PS syntax is too explicit imo


Blocked by the corporate proxy 😢😤

Why though, shouldn't all developers have local admin on workstations?

Or at the very least, shouldn't you be able to request a change in these policies for work-related purposes?

currently downloading using the Microsoft store is blocked by the corporate proxy, but maybe there are other ways to get the Linux Subsystem up and running?

Set up a forwarder when at home; use it from the office. :)


The feeling you've after the command finishes execution

Like a boss

PS: Don't forget to run git checkout master


Wow that was perfect as I was deleting about multiple local branches manually!

Left with two and tried that one above and worked fabulously!



Just make sure to back up everything first :P

git push --all {remote}

Oh man if I forgot to back up first...that would ruin so many things for me. We have a tendency to re-prioritize things so some branches are left half done for awhile, sometimes many months.


I was just looking for something like this, thanks!


Here's one if you want to keep both master and develop:

> git branch | grep -v "master\|develop" | xargs git branch -D

A handy one indeed @ben . I went one step further and created an alias "git repo cleanup" in my ~/.bash_rc . Keeping a clean local is super helpful when projects get large and dozens of devs have you reviewing / checking / assisting daily.


Is there any way to merge everything in master before deleting?


It's generally not a good idea. If you finished working on a feature branch, merge it. If a branch isn't merged, it contains work in progress. Work in progress means something isn't working there. Also mass merging often leads to lots of conflicts.