我遵循一个开发过程,即为每个新功能或故事卡创建一个新的本地分支。完成后,我合并到主分支,然后推。

随着时间的推移,由于懒惰或健忘,我最终会得到一个很大的本地分支列表,其中一些(如spike)可能还没有合并。

我知道如何列出我所有的本地分支,我知道如何删除一个分支,但我想知道是否有一个git命令,允许我删除我所有的本地分支?

下面是git分支——merged命令的输出。

user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

所有尝试删除grep -v \*列出的分支(根据下面的答案)都会导致错误:

error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.

我用的是:

git 1.7.4.1  
ubuntu 10.04  
GNU bash, version 4.1.5(1)-release  
GNU grep 2.5.4  

当前回答

删除所有分支,但保留“develop”和“master”等其他分支的更简单的方法如下:

git branch | grep -v "develop" | grep -v "master" | xargs git branch -D

非常有用!

其他回答

我建议一个更温和的答案。这里的许多答案都使用-D,这是强制删除的,无论更改是否已合并。这里有一行代码,它不影响那些没有合并变更的分支。

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

或者你也可以试试其他例子,只要把-D改成-D就行了。我知道OP问如何删除,但在大多数情况下,使用-d更安全。

试试下面的shell命令:

git branch | grep -v "master" | xargs git branch -D

解释:

通过git branch | grep -v "master"命令获取所有分支(除了master) 使用xargs命令选择每个分支 用xargs git branch -D删除分支

git branch | grep release-1.4 | xargs -n 1 -I % sh -c 'git branch -D %'

删除所有名称与模式“release-1.4*”匹配的分支的简单方法。我还定期使用它与票据前缀一起删除所有本地工作分支,但不打扰管道分支。

没有一个答案能完全满足我的需求,所以我们开始吧:

git branch --merged | grep -E "(feature|bugfix|hotfix)/" | xargs git branch -D && git remote prune origin

这将删除所有以feature/, bugfix/或hotfix/开头合并的本地分支。然后,上游远程源被修剪(您可能必须输入密码)。

适用于Git 1.9.5。

git branch -l |grep -v master | xargs git branch -D

但删去分支又何妨;如果它是一个小型存储库,只需删除工作区并重新克隆它!!