2015-02-17 91 views
29

我想删除获得的我可以删除当前的所有分支吗?

$ git branch 

输出中列出但保持当前分支,一步到位所有分支。那可能吗?如果是这样,怎么样?

+1

[删除所有本地git分支](http://stackoverflow.com/questions/10610327/delete-all-local-git-branches) – 2015-02-18 00:38:11

+1

可能的重复[如何删除所有本地git分支但保留大师与一个命令行?](http://stackoverflow.com/questions/25112684/how-to-remove-all-local-git-branches-but-keep-master-with-one-command-line) – random 2015-02-18 01:41:15

+0

可能[如何删除所有已合并的git分支?](https://stackoverflow.com/questions/6127328/how-can-i-delete-all-git-branches-which-have-been-merged ) – 2017-08-01 09:11:43

回答

18

基于@pankijs答案,我做了两个混帐别名:

[alias] 
    # Delete all local branches but master and the current one, only if they are fully merged with master. 
    br-delete-useless = "!f(){\ 
     git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\ 
    }; f" 
    # Delete all local branches but master and the current one. 
    br-delete-useless-force = "!f(){\ 
     git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\ 
    }; f" 

~/.gitconfig


而添加,作为@torek指出:

请注意,小写字母-d不会删除“未完全合并”的麸皮ch(请参阅文档)。使用-D将删除这些分支,即使这会导致提交变为“丢失”; 使用这个非常谨慎,因为这也删除分支reflogs,以便通常的“从意外删除”东西也不起作用。

基本上,从来没有使用-force版本,如果你不是300%肯定你不会失去任何重要的东西。因为它永远丢失

+1

提交到一个被删除的分支应该仍然在reflog中一段时间​​ – CaptRespect 2017-11-16 18:53:20

+0

确实,提交会停留在reflog中,但不是分支本身,但是我想你可能会发现你的提交,但回到分支状态?我怀疑是这样的。Cherry-pick可以用来检索已删除分支中的提交,但是你将无法恢复分支本身。 – Vadorequest 2018-02-19 23:28:44

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

将删除所有分支,除了主,你要保持分支更换主(将删除主)

+13

如果你想保持*当前*分支使用'grep -v^*'。 – Schwern 2015-02-17 22:27:22

+2

很多消息都向我展示了这个脚本,但是当我运行它时总是告诉我没有找到分支:( – tucq88 2017-03-31 08:09:17

+0

这不是准确的,它不会删除一个叫做'master-copy'的分支,例如 – mvallebr 2017-05-05 16:27:31

10

git branch -d(或-D)允许多个分支名称,但它是一个有点棘手自动提供“除了我现在正在使用的所有分支机构之外,所有地方分支机构“都没有写入至少一点代码。

“最佳”(正式名称是正确的)方法是使用git for-each-ref得到分支名称:

git for-each-ref --format '%(refname:short)' refs/heads 

但随后弄清楚你是在哪个分支更难(git symbolic-ref HEAD是“正式正确的“方法,如果你想写一个奇特的脚本)。

更方便的是,您可以使用git branch,它打印您的本地分支名称前面有两个空格或(对于当前分支)以星号*打印。所以,通过一些运行此删除*版本,留给你的空间分隔的分支名称,然后你就可以传递给git branch -d

git branch -d $(git branch | grep -v '^*') 

或:

git branch | grep -v '^*' | xargs git branch -d 

注意小写-d不会删除“非完全合并”分支(请参阅文档)。使用-D将删除这些分支,即使这会导致提交变为“丢失”;请谨慎使用它,因为这也会删除分支reflog,以便通常的“从意外删除中恢复”的东西也不起作用。

4

要删除所有分支合并(除了当前-v ‘*’):

git branch --merged | grep -v '*' | xargs git branch -D 

我也回购完成清理做了这样的命令:

alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f" 

here拍摄。

相关问题