一尘不染

如何删除所有已合并的 Git 分支?

git

我有很多 Git 分支。如何删除已经合并的分支?有没有一种简单的方法可以将它们全部删除而不是一个一个删除?


阅读 288

收藏
2022-02-09

共1个答案

一尘不染

更新:

如果您的工作流将这些分支作为可能的祖先,您可以添加其他分支以排除,例如 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
2022-02-09