我遵循一个开发过程,为每个新功能或故事卡创建一个新的本地分支。完成后,我将分支合并到 master 然后推送。
由于懒惰或健忘,随着时间的推移往往会发生的情况是,我最终得到了大量本地分支,其中一些(例如尖峰)可能尚未合并。
我知道如何列出我所有的本地分支,我知道如何删除一个分支,但我想知道是否有一个 git 命令可以让我删除所有本地分支?
下面是git branch --merged命令的输出。
git branch --merged
user@machine:~/projects/application[master]$ git branch --merged STORY-123-Short-Description STORY-456-Another-Description STORY-789-Blah-Blah * master
所有尝试删除列出的分支grep -v \*(根据下面的答案)都会导致错误:
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,版本 4.1.5(1)-release GNU grep 2.5.4
‘git branch -d’ 子命令可以删除多个分支。因此,简化@sblom 的答案,但添加一个关键的 xargs:
git branch -D `git branch --merged | grep -v \* | xargs`
或者,进一步简化为:
git branch --merged | grep -v \* | xargs git branch -D
重要的是,正如@AndrewC 所指出的,git branch不鼓励使用 for scripting。为了避免它使用类似的东西:
git branch
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main" | xargs git branch -D
删除需谨慎!
$ mkdir br $ cd br; git init Initialized empty Git repository in /Users/ebg/test/br/.git/ $ touch README; git add README; git commit -m 'First commit' [master (root-commit) 1d738b5] First commit 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 README $ git branch Story-123-a $ git branch Story-123-b $ git branch Story-123-c $ git branch --merged Story-123-a Story-123-b Story-123-c * master $ git branch --merged | grep -v \* | xargs Story-123-a Story-123-b Story-123-c $ git branch --merged | grep -v \* | xargs git branch -D Deleted branch Story-123-a (was 1d738b5). Deleted branch Story-123-b (was 1d738b5). Deleted branch Story-123-c (was 1d738b5).