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

随着时间的推移,由于懒惰或健忘,我最终会得到一个很大的本地分支列表,其中一些(如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  

当前回答

从Windows命令行删除除当前签出的分支以外的所有分支:

for /f "tokens=*" %f in ('git branch ^| find /v "*"') do git branch -D %f

其他回答

我在github上关于这个问题的评论中找到了一个更好的方法:

git branch --merged master --no-color | grep -v "master\|stable\|main" | xargs git branch -d

编辑:添加无颜色选项和排除稳定分支(根据您的情况添加其他分支)

删除所有本地git分支,但保留主

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

我发现使用文本编辑器和shell更容易。

在shell中输入git checkout <TAB>。将显示所有本地分支。 复制它们到文本编辑器,删除那些你需要保留。 用空格替换换行。(在SublimeText中,这非常简单。) 打开shell,输入git branch -D <PASTE THE BRANCHES NAMES HERE>。

就是这样。

下面的命令将删除除主分支以外的所有本地分支。

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

上面的命令

列出所有分支 从列表中忽略主分支,并获取其余分支 删除分支

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

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

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

适用于Git 1.9.5。