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

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

当前回答

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

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

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

适用于Git 1.9.5。

其他回答

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

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

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

如果你想保持主,开发和所有远程分支。删除所有不在Github上的本地分支。

$ git fetch --prune

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

1]它将删除远程库中不再使用的远程引用。

2]这将得到你所有分支的列表。从列表中删除包含master、develop或origin(远程分支)的分支。删除列表中的所有分支。

警告-这删除自己的本地分支以及。所以,当你合并了你的分支,并在合并后进行清理时,删除。

要删除除当前已签出的分支之外的所有分支:

for b in `git branch --merged | grep -v \*`; do git branch -D $b; done

我建议在前几次将git branch -D $b更改为echo $b,以确保它删除了你想要的分支。

下面是适用于Windows机器的Powershell解决方案

git checkout master # by being on the master branch, you won't be able to delete it
foreach($branch in (git branch))
{
    git branch -D $branch.Trim()
}

如果你使用NodeJS,我写了这个命令:

npx git-clear-branch

该命令清除除master和当前分支之外的所有本地分支。