Git-骚操作-批量删除分支

这是一个危险操作

前言

一个业务一个业务开发过去,少的是头发,留下的还有超多的本地分支。

某一天,我的强迫症突然发作了,我就只想保留当前开发的本地分支,该怎么办呢?当然也可以逐条人肉删除,但是我不是很喜欢,不仅累,还显的我不是那么聪明。
于是,去寻找是否有批量删除的命令,果然,它是有的!

批量删除分支命令的 What & Why?

批量删除分支命令具体格式为:

1
git branch |grep 'xxx' |xargs git branch -D

有两个使用上要注意的地方:

  • xxx 要替换成分支名称的搜索关键词。
  • git branch -D删除命令中的 -D 和 -d 参数要合理使用,避免强制删除发生惨剧。

不知你有没有注意到,这条命令的格式很特殊,不是常规的 Git 命令格式。其中含有 Linux 命令 grep ,Git 命令 git branch -D,还有陌生的 xargs,不常见的 | ,我开始好奇,上面都是些啥,以及上面的命令是如何做到批量删除的?

为了解决自己的疑问,我去搜索下相关知识,get了不少小技能,现在记在小本本上总结一下。

首先 grepxargs| 三个都是 Linux 提供的命令。

grep

grep 很常见,是以上三个命令我唯一认识的,名称是 global regular expression print(全局正则表达式输出)的缩写,是Linux 提供的一个搜索工具,搭配不同参数使用,几乎可以做到搜索任何东西,文件,文件夹,文本内容,搜索结果的总数等。这有篇不错的文章,想了解的同学可以去看下。14 个 grep 命令的例子

KISS 和 | 命令

下面两个命令,需要先说明一下Linux 的 KISS 理念。不要多想,不是么么哒,而是 Keep It Simple,Stupid! 表达的意思是每个命令工具都只做一件事情,简单好用。基于这种理念,Linux 的很多命令都是相互独立的。那真实使用场景中,有很多复杂的事情,需要多条命令协作使用,于是 Linux 提供了管道来完成直接的数据传输。管道的操作符就是 |

  • 基本格式

    1
    指令1 | 指令2 | ...
  • 作用
    用来连接多条指令,前一条指令的输出流向会作为后一条指令的标准输入。

  • 例1:

1
ls | grep  "Android"
执行结果:列出该路径下所有名称包含 Android 的文件 ![](https://raw.githubusercontent.com/DRPrincess/BlogImages/master/qiniub68142785f8d8eb5fefa6faf665a1e8f.png)
  • 例2:

    1
    git branch | grep  "feature"

    执行结果:列出当前项目所有分支中,名称含有”feature”的分支。

xargs

xargs 命令配合 | 使用,将前一条指令的输出流向会作为后一条指令的参数输入。

  • 基本格式

    1
    指令1 | xargs 指令2 | ...
  • 作用
    命令配合 | 使用,将前一条指令的输出流向会作为后一条指令的参数输入。

![](https://raw.githubusercontent.com/DRPrincess/BlogImages/master/qiniuda7a758287c697b6c3f0d2a889e6467b.png)
  • 例1:

    1
    ls | grep  "Android" | xargs cat

    执行结果:输出该路径下所有名称包含 Android 的文件的内容

  • 例2:

    1
    git branch | grep  "feature" | xargs git branch -d

    执行结果: 找出所有分支中,名称含有”feature”的分支,然后删除。

总结

大多时候都是搜索到相关命令直接用就没有后续了,也不知道具体的原理。于是,无知的我,还是第一次清楚的理解 Linux 的管道命令。使用管道组合命令实现批量删除的实现很受启发,以后遇到问题也多了一种解决思路。

学无止境,不能懈怠,新知识带来的愉悦感是不可比拟的,希望我们在每一天都有所成长,下篇文章见。



欢迎关注个人微信公众号,最新的博客,好玩的事情,都会在上面分享,期待与你共同成长。