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


当前回答

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

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

其他回答

请尝试以下命令:

git branch -d $(git branch --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

通过使用gitrevparse,将获取当前分支名称以排除它。如果出现错误,则意味着没有要删除的本地分支。

要对远程分支执行相同操作(使用远程名称更改源),请尝试:

git push origin -vd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD) | cut -d/ -f2)

如果您有多个遥控器,请在剪切之前添加grep-origin |,以仅过滤源。

如果上述命令失败,请尝试先删除合并的远程跟踪分支:

git branch -rd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))

然后git再次获取远程,并再次使用前面的gitpush-vd命令。

如果您经常使用它,请考虑将别名添加到~/.gitconfig文件中。

如果您错误地删除了一些分支,请使用gitreflog查找丢失的提交。

我使用git流式命名方案,因此这对我来说非常安全:

git branch --merged | grep -e "^\s\+\(fix\|feature\)/" | xargs git branch -d

它主要查找以字符串fix/或feature/开头的合并提交。

我发现最简单的方法是只删除本地分支,而不是远程分支:

$git分支--合并|grep-v主|xargs-n 1 git分支-D

此命令将仅删除已合并到主分支中的分支。如果您不想删除其他分支(例如登台),请小心。

Git中没有命令会自动为您执行此操作。但是你可以编写一个脚本,使用Git命令来满足你的需要。这可以通过多种方式实现,具体取决于您使用的分支模型。

如果您需要知道分支是否已合并到master中,如果myTopicBranch已合并,则以下命令将不会产生输出(即,您可以删除它)

$ git rev-list master | grep $(git rev-parse myTopicBranch)

您可以使用Gitbranch命令解析出Bash中的所有分支,并对所有分支执行for循环。在这个循环中,您可以使用上面的命令检查是否可以删除分支。

注意:如果您的工作流可能将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