git批量删除分支

场景描述

使用git久了,会创建大量的git分支,这时候会变得难以管理,需要删除掉以前不需要的分支,如果通过git branch -d branchName一个个删除,十分麻烦。

方法

本地分支

git branch | grep -E 'branchName' | xargs git branch -d

远程分支

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

本地Tag

git tag | grep -E '201701' | xargs -I {} git tag -d {}

远程Tag

git tag | grep -E '201701' | xargs -I {} git push origin :refs/tags/{}

说明

git branch 输出当前的所有分支
grep 是对 git branch 的输出结果进行匹配,匹配值就是 branchName
-E 使用正则表达式
xargs 的作用是将参数列表转换成小块分段传递给其他命令

因此,这条命令的意思就是:

从分支列表中匹配到指定分支,然后一个一个(分成小块)传递给删除分支的命令,最后进行删除。
从而就达到了我们想要批量删除分支的目的。

优化

虽然实现了批量删除分支的操作,但每次要输入这么长命令,很麻烦,可以通过配置bash 的 alias

cd ~
vi .bash_profile

然后加入以下这段,alias本身不支持传递参数,所以需要通过函数的方式

alias gitDel='del() { git branch | grep "$1" | xargs git branch -d }; del'

保存退出生效后,就可以直接使用,来进行批量删除了

gitDel '模糊分支名称'