前言

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

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

What-批量删除分支命令

批量删除本地分支

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

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

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

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

批量删除远程分支


有小伙伴在评论中有这样的疑问,实际开发场景的确也有类型的需求,那么我们就来搞一下

git branch -r | grep  'xxx' | sed 's/origin\///g' | xargs -I {} git push origin :{}

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

  • xxx 要替换成分支名称的搜索关键词。
  • git branch -r 是仅仅查询远程分支,这里看大家的需求,按需调整。(例如你没有拉取到远程的最新分支,要删除那个最近分支,可能查询不到哦,这种情况可以直接使用本地分支查询git branch ,或者全量查询 git branch -a
  • 这里只删除了远程分支,本地分支还在的,如果需要,需要再删除下本地的分支

Why-如何做到批量的呢

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

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

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

grep

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

sed

sed 命令是利用脚本来编辑文本文件。采用的是流编辑模式,最明显的特点是,处理数据前,需要预先提供一组规则,会按照该规则来编辑数据。

例如我们删除远程分支用的命令 sed 's/origin\///g' 就是其中一个用法,模式如下:

sed 's/要被取代的字串/新的字串/g'

如果有兴趣详细了解,推荐文章:Linux sed命令完全攻略(超级详细)

KISS 和 | 命令

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

  • 基本格式

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

  • 例1:

     ls | grep  "Android"

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

  • 例2:

     git branch | grep  "feature"

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

xargs

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

  • 基本格式

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

  • 例1:

     ls | grep  "Android" | xargs cat

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

  • 例2:

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

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

总结

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

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


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

Git-骚操作之批量删除分支相关推荐

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

    前言 一个业务一个业务开发过去,少的是头发,留下的还有超多的本地分支. 某一天,我的强迫症突然发作了,我就只想保留当前开发的本地分支,该怎么办呢?当然也可以逐条人肉删除,但是我不是很喜欢,不仅累,还显 ...

  2. 11、git查看往日提交以及删除分支ID命令

    git查看往日提交以及删除分支ID  git reflog --date=iso

  3. git idea 可视化_那些你应该知道的,但是你一定不知道的 Git 骚操作

    Hello 大家好,作为团队中的主程阿粉经常参与很多核心功能的开发,而且很多时候一个需求没做好中间又插入新的紧急的需求或者 bug 修复,每次遇到这种情况,如果两个地方代码不冲突的话还好,可以直接在本 ...

  4. Redis常用操作之批量删除keys,和清空整个数据库

    redis默认有0-15总共16个库,默认在0库 1.选择库DB0,例:select 1 选择db1 10.143.153.216:8896> select 0  OK 2.查看所选择库的大小: ...

  5. git浏览器界面管理之删除分支

    1.点击左侧菜单仓库(Repository): 2.仓库(Repository) 下找到分支(branches): 3.选中右侧界面不用的分支删除即可

  6. 删除套餐(关联表的删除操作,批量删除,单个删除)

    需求分析: 代码开发-梳理交互过程: 重写接口: public interface SetmealService extends IService<Setmeal> {/*** 新增套餐, ...

  7. mybatis plus骚操作之逻辑删除

    介绍

  8. git删除分支,提示无法删除,怎么处理 ?

    删除之前你自己创建的,自己昵称的dev分支(如 老徐 idoxu_dev) 1)命令 git branch -d 2)效果 如果提示无法删除: [root@istester gittest]# git ...

  9. Git科普文,Git基本原理各种骚操作

    Git简单介绍 Git是一个分布式版本控制软件,最初由Linus Torvalds创作,于2005年以GPL发布.最初目的是为更好地管理Linux内核开发而设计.   Git工作流程以及各个区域 Wo ...

最新文章

  1. mac 上搭建gitlabel_在mac终端中使用git(适用于github、gitlabel)
  2. 行锁mysql怎么执行_Mysql调用什么情况会用到行锁与表锁
  3. (24) 不可能的出栈顺序
  4. python群发短信脚本_python实现zabbix发送短信脚本
  5. 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码
  6. 【Contact】结构体+动态内存管理+文件存储实现简易通讯录代码
  7. CN笔记:第一章 计算机网络概述
  8. 网络安全分析 | 用OpenFEA定位WebShell木马后门
  9. markdown mysql高亮_博客园里Markdown支持高亮显示的语言
  10. jqGrid Pager、Navigator和自定义按钮(转)
  11. AI2(App Inventor 2)离线版服务器(2019.8.25更新)
  12. office相关文件转pdf的几种方式
  13. 转载:全志问题解决方法
  14. Android 子线程更新UI
  15. 小白学 Python 数据分析(17):Matplotlib(二)基础操作
  16. 从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)
  17. 任意装修、在线DIY定制商城系统,跟紧时代的潮流
  18. 美DARPA支持研发用于救灾与高风险环境的微型机器人
  19. 【游戏编程扯淡精粹】如何学习编程语言
  20. seo外链建设(如何正确做好seo网站外链建设)

热门文章

  1. JS所有类型选择器,包括父子兄弟等
  2. 电脑控制手机,教你通过脚本实现自动安装、卸载软件
  3. 基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例
  4. 教你批量筛选,快递物流中一天未更新的单号
  5. 物理学专业英语(词汇整理)--------05
  6. mongoDB之ObjectId
  7. 职称计算机报名密码忘了,忘了WindowsXP超级管理员密码,怎么办
  8. html超出父元素,css怎么让元素超出父元素
  9. [LeetCode]849. Maximize Distance to Closest Person 解题报告(C++)
  10. 报错:MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O