How can I delete all Git branches which have been merged?

后端 未结 30 1317
离开以前
离开以前 2020-11-22 14:22

I have many Git branches. How do I delete branches which have already been merged? Is there an easy way to delete them all instead of deleting them one by one?

30条回答
  •  旧时难觅i
    2020-11-22 15:24

    The accepted solution is pretty good, but has the one issue that it also deletes local branches that were not yet merged into a remote.

    If you look at the output of you will see something like

    $ git branch --merged master -v
      api_doc                  3a05427 [gone] Start of describing the Java API
      bla                      52e080a Update wording.
      branch-1.0               32f1a72 [maven-release-plugin] prepare release 1.0.1
      initial_proposal         6e59fb0 [gone] Original proposal, converted to AsciiDoc.
      issue_248                be2ba3c Skip unit-for-type checking. This needs more work. (#254)
      master                   be2ba3c Skip unit-for-type checking. This needs more work. (#254)
    

    Branches bla and issue_248 are local branches that would be deleted silently.

    But you can also see the word [gone], which indicate branches that had been pushed to a remote (which is now gone) and thus denote branches can be deleted.

    The original answer can thus be changed to (split into multiline for shorter line length)

    git branch --merged master -v | \
         grep  "\\[gone\\]" | \
         sed -e 's/^..//' -e 's/\S* .*//' | \
          xargs git branch -d
    

    to protect the not yet merged branches. Also the grepping for master to protect it, is not needed, as this has a remote at origin and does not show up as gone.

提交回复
热议问题