我如何删除已经合并的所有Git分支?
删除所有已经合并的远程分支:
git branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin
在更新版本的Git中:
git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
更新(由@oliver提供;此处不符合评论要求,但已有足够答案):如果你在分支ABC上,则ABC会出现在git branch -r --merged
的结果中,因为没有指定分支,所以默认为当前分支,并且分支总是被认为与自己合并(因为分支和自身之间没有区别!)。
所以要么指定分支:
git branch -r --merged master | grep -v master ...
要么先检出master分支:
git checkout master | git branch -r --merged | grep -v ...
注意: 如果你的工作流程可能有类似master和dev的祖先分支,你可以添加其他需要排除的分支。通常我会从"sprint-start"标签分支出来,master、dev和qa不是祖先分支。
首先,列出已在远程合并的本地追踪分支(考虑使用-r
标志列出所有远程追踪分支)。
git branch --merged
你可能会看到几个你不想删除的分支。我们可以添加一些参数跳过我们不想删除的重要分支,比如master或develop。以下命令将跳过master分支和包含dev的任何内容。
git branch --merged| egrep -v "(^\*|master|main|dev)"
如果你想要跳过,可以将它添加到egrep命令中,如下所示。分支skip_branch_name
不会被删除。
git branch --merged| egrep -v "(^\*|master|main|dev|skip_branch_name)"
要删除所有已合并到当前检出分支的本地分支:
git branch --merged | egrep -v "(^\*|master|main|dev)" | xargs git branch -d
你可以看到master和dev被排除在外,以防它们是祖先分支。
你可以使用以下命令删除已合并的本地分支:
git branch -d branchname
如果它没有合并,使用:
git branch -D branchname
要从远程删除它,请使用:
git push --delete origin branchname git push origin :branchname # for really old git
一旦你从远程删除分支,你就可以使用以下命令清除远程跟踪分支:
git remote prune origin
或者像其他答案建议的那样,清除单个远程跟踪分支:
git branch -dr branchname