DEV Community

Andrei Fedotov
Andrei Fedotov

Posted on

Git: How to delete all local branches except master

Checkout to master branch.

The command to delete all branches except master is:
git branch | grep -v "master" | xargs git branch -D

To use the same command in Windows we have to install some utilities

Or, we can use PowerShell command that do the same thing that above command do:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
git branch -D @(git branch | select-string -NotMatch "master" | Foreach {$_.Line.Trim()})
Alt text of image

Top comments (5)

vishnumeera profile image

thank you so much, just added one more check

git branch | %{$.Trim()} | ?{$ -ne 'master' -and $.Substring(0,1) -ne '*'} | %{git branch -D $}

rhartzell profile image
Rod Hartzell

Ha! Sweet. Super simple and super efficient. Thanks for sharing.

mahldcat profile image

I did noticed on the first powershell one liner, I did noticed that one of the response lines was:

"error: branch '* master' not found."

andreisfedotov profile image
Andrei Fedotov


I've just checked it again in PowerShell and everything works. I made a quick check like:
git init
git branch new
git branch new2
git branch new3
git branch new4
git branch | grep -v "master" | xargs git branch -D

Just to confirm, are you sure that you installed Gow utilities, input the command correctly and that you are in master branch?

ap3rus profile image
Vladislav Nagornyi

It's the PS script which gives this error, as the git branch prefixes selected branch with asterisk:

❯ git branch |`
  %{ $_.Trim() } |`
  ?{ $_ -ne 'master' } |`
  %{ git branch -D $_ }
Enter fullscreen mode Exit fullscreen mode
Deleted branch <branch1> (was <commit1>).
error: branch '* master' not found.
Enter fullscreen mode Exit fullscreen mode

Could be addressed e.g. by adding check for * master:

git branch |`
  %{ $_.Trim() } |`
  ?{ $_ -ne 'master' -and $_ -ne '* master' } |`
  %{ git branch -D $_ }
Enter fullscreen mode Exit fullscreen mode