gitgithub

How to delete branches whose name matches a certain pattern


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.


Solution

  • 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