如何删除已合并的分支?我可以一次删除所有分支,而不是逐个删除每个分支吗?


当前回答

注意:我对前面的回答不满意,(不在所有系统上工作,不在远程工作,不指定--merged分支,不完全过滤)。所以,我补充了我自己的答案。

主要有两种情况:

地方的

您要删除已合并到另一个本地分支的本地分支。在删除过程中,您希望保留一些重要分支,如master、develop等。

git branch --format "%(refname:short)" --merged master | grep -E -v '^master$|^feature/develop$' | xargs -n 1 git branch -d

笔记:

git分支输出--格式“..”是去除空格并允许精确的grep匹配grep-E用于代替egrep,因此它也适用于没有egrep的系统(即:git for windows)。grep-E-v“^master$|^feature/develd$”是指定我不想删除的本地分支xargs-n 1 git branch-d:执行本地分支的删除(它不适用于远程分支)当然,如果您尝试删除当前签出的分支,会出现错误。所以,我建议提前切换到master。

遥远的

您要删除已合并到另一个远程分支的远程分支。在删除过程中,您希望保留一些重要的分支,如HEAD、master、releases等。

git branch -r --format "%(refname:short)" --merged origin/master | grep -E -v '^*HEAD$|^*/master$|^*release' | cut -d/ -f2- | xargs -n 1 git push --delete origin

笔记:

对于remote,我们使用-r选项并提供完整的分支名称:origin/mastergrep-E-v'^*HEAD$|^*/master$|^*release'是为了匹配我们不想删除的远程分支。cut-d/-f2-:删除不需要的“origin/”前缀,否则将由gitbranch命令打印出来。xargs-n 1 git push--delete origin:执行远程分支的删除。

其他回答

库布恩的回答没有删除分支名称中包含单词master的分支。以下内容改进了他的回答:

git branch -r --merged | grep -v "origin/master$" | sed 's/\s*origin\///' | xargs -n 1 git push --delete origin

当然,它不会删除“master”分支本身:)

这也适用于删除除主分支之外的所有合并分支。

git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d

Git Sweep在这方面做得很好。

如果您使用的是HubFlow或GitFlow等分支模型,则可以使用此命令删除合并的功能分支:

git branch --merged | grep feature.* | grep -v "\*" | xargs -n 1 git branch -d

要删除已合并到主分支的本地分支,我使用以下别名(git-config-e--global):

cleanup = "!git branch --merged master | grep -v '^*\\|master' | xargs -n 1 git branch -D"

我使用gitbranch-D来避免错误:分支“somebranch”未完全合并。消息,而我的当前签出与主分支不同。