首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除所有本地git分支

删除所有本地git分支
EN

Stack Overflow用户
提问于 2012-05-16 07:45:48
回答 17查看 312.3K关注 0票数 474

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

由于懒惰或健忘的组合,随着时间的推移,往往会发生什么,就是我最终得到了一个很大的本地分支列表,其中一些分支(例如尖峰分支)可能没有合并。

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

下面是git branch --merged命令的输出。

代码语言:javascript
复制
user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

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

代码语言:javascript
复制
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

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2012-05-16 08:43:24

'git branch -d‘子命令可以删除多个分支。因此,简化@sblom的答案,但添加一个关键的xargs:

代码语言:javascript
复制
git branch -D `git branch --merged | grep -v \* | xargs`

或者,进一步简化为:

代码语言:javascript
复制
git branch --merged | grep -v \* | xargs git branch -D 

重要的是,正如@AndrewC所指出的,不鼓励使用git branch编写脚本。要避免这种情况,请使用类似以下内容:

代码语言:javascript
复制
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main" | xargs git branch -D

删除时需要谨慎!

代码语言:javascript
复制
$ 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).
票数 569
EN

Stack Overflow用户

发布于 2014-10-02 07:20:20

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

代码语言:javascript
复制
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D

非常有用!

票数 145
EN

Stack Overflow用户

发布于 2012-05-16 07:50:03

要删除除当前已签出的分支之外的所有分支,请执行以下操作:

代码语言:javascript
复制
for b in `git branch --merged | grep -v \*`; do git branch -D $b; done

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

票数 68
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10610327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档