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

10 浏览
0 Comments

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

如何删除已合并的分支?我能同时删除它们吗,而不是一次删除一个分支?

admin 更改状态以发布 2023年5月21日
0
0 Comments

删除所有已经合并的远程分支:

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 ...

0
0 Comments

注意: 如果你的工作流程可能有类似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

0