小编典典

删除所有本地 git 分支

all

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

由于懒惰或健忘,随着时间的推移往往会发生的情况是,我最终得到了大量本地分支,其中一些(例如尖峰)可能尚未合并。

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

下面是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 \*(根据下面的答案)都会导致错误:

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


阅读 95

收藏
2022-03-13

共1个答案

小编典典

‘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 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).
2022-03-13