Delete git branches whose name matches a certain pattern

17,957

Solution 1

Update: The -r option to xargs is a GNU addon. Unless you use xargs from GNU findutils it might not work. You can omit it but that leads to an error if the input piped to xargs is empty.


You can use git branch --list <pattern> and pipe it's output to xargs git branch -d:

git branch --list 'o*' | xargs -r git branch -d

Btw, there is a minor issue with the code above. If you've currently checked out one of the branches that begins with o the output of git branch --list 'o*' would look like this:

* origin_master
origin_test
o_what_a_branch

Note the asterisk * in front of the current branch name.

While you cannot delete the current branch anyway, it leads to the fact that xargs also passes * to git branch delete.

As I say it is just a cosmetic error, but if you want to avoid it use:

git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d

Solution 2

Another way could be this:

git branch -d $(git branch | grep yourSearchPattern)

to me looks more intuitive because grep is something I use daily.

You could also make an alias of it (or also of any solution suggested here), check for example here how to pass arguments to an alias: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

PS in your specific case, yourSearchPattern could be origin:

git branch -d $(git branch | grep origin)

PPS as next step, would be also nice to make the deleting process more verbose, for example would be nice that you have to confirm the delete for each branch. But I think that overcomes the question...

Solution 3

git branch -D $(git branch --list 'regex_here')
Example: \
git branch -D $(git branch --list 'aputhen/*')
Deletes all branches with name starting with aputhen/.

Solution 4

Late to the party but another way of doing this is

git branch -d `git branch | grep substring`

and for current question

git branch -d `git branch | grep origin`

This will delete all branches whose names contain origin.

Solution 5

Adding the script I use in PowerShell (Windows)

Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }

Share:
17,957

Related videos on Youtube

Nirmalya Ghosh
Author by

Nirmalya Ghosh

Updated on September 15, 2022

Comments

  • Nirmalya Ghosh
    Nirmalya Ghosh over 1 year

    How can I delete branches in git starting with the letter 'o'?

    Suppose, I have a list of branches like the following:

    origin_alpha
    origin_beta
    origin_gamma
    alpha
    beta
    gamma
    

    I wan't to delete the branches origin_alpha, origin_beta and origin_gamma.

    • Nirmalya Ghosh
      Nirmalya Ghosh over 8 years
      @kvdv Thanks for your answer. Suppose, I've 50 branches starting with the letter 'o', then it isn't convenient to manually delete all those branches. Hence, the question.
  • cmbuckley
    cmbuckley over 8 years
    This won't work if you're on one of those branches, as your output will contain the highlighting asterisk. See the answer stackoverflow.com/a/3670560/283078.
  • Nirmalya Ghosh
    Nirmalya Ghosh over 8 years
    Switched to master and applied this code. Solved my problem. Thanks.
  • hek2mgl
    hek2mgl over 8 years
    @cmbuckley git branch -d <branch> would also not work if you are on that branch. ;) That's why I've ignored that.
  • Igor Mironenko
    Igor Mironenko almost 6 years
    This must be a windows thing, because while git branch --list 'hotfix' shows a list of branches for me, git branch --list 'hotfix' | xargs git branch -d gives me fatal: branch name required
  • Igor Mironenko
    Igor Mironenko almost 6 years
    I'm on windows right now, and though I have the full unix command set, like grep, your suggestion here eg git branch -d $(git branch | grep hotfix) fails with error: branch '$(git' not found
  • hek2mgl
    hek2mgl almost 6 years
    What gives you git branch --list 'hotfix'?
  • lzzluca
    lzzluca almost 6 years
    At the first sight: is $() is correctly recognised by Win? seems that git is trying to remove the branch $(git instead of replacing it with the command output
  • Eduard
    Eduard over 5 years
    It would be great to see the elaboration on what the first line of code after "-d" does.
  • Eduard
    Eduard over 5 years
    not sure why this answer is so popular, @Izzluca's answer is much more cleaner and comprehensible.
  • hek2mgl
    hek2mgl over 5 years
    @Eduard Define much more cleaner! Basically my answer is git branch --list 'o*' | xargs -r git branch -d - which is actually quite clean and short. The problem is with that *, that's why it needs the additional sed. The other answer would fail in that case. Having that, my best guess is that this answer is so popular because it works :)
  • Feiyu Zhou
    Feiyu Zhou over 5 years
    git branch --list o | xargs -r git branch -d works on windows
  • Amy Pellegrini
    Amy Pellegrini over 5 years
    Just tried on a Mac: xargs doesn't accept -r (illegal option -- r) but it worked without it for the desired purpose.
  • Igor Mironenko
    Igor Mironenko over 3 years
    FYI The single quotes kill it for me on Windows right now git branch --list 'hotfix' shows nothing but git branch --list "hotfix" does the trick
  • pdem
    pdem over 2 years
    To use it as an alias (caution no warnings) , add in your ~/.gitconfig brrm = "!f(){ git branch --list \"$1\" | xargs -r git branch -d; }; f" then use it with git brrm feature*