1 查看远程分支
$ git branch -a
* br-2.1.2.2
master
remotes/origin/HEAD -> origin/master
remotes/origin/br-2.1.2.1
remotes/origin/br-2.1.2.2
remotes/origin/br-2.1.3
remotes/origin/master
2 查看本地分支
$ git branch
* br-2.1.2.2
master
3 创建分支
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git branch test
$ git branch
* br-2.1.2.2
master
test
4 切换分支到test
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git branch
* br-2.1.2.2
master
test
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git checkout test
M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
Switched to branch 'test'
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
$ git branch
br-2.1.2.2
master
* test
5 删除本地分支 git branch -d xxxxx
$ git checkout br-2.1.2.2
M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
Switched to branch 'br-2.1.2.2'
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git br
* br-2.1.2.2
master
test
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git br -d test
Deleted branch test (was 17d28d9).
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
$ git br
* br-2.1.2.2
master
6 查看本地和远程分支 -a。前面带*号的代表你当前工作目录所处的分支
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
$ git branch -a
br-2.1.2.2
master
* test
remotes/origin/HEAD -> origin/master
remotes/origin/br-2.1.2.1
remotes/origin/br-2.1.2.2
remotes/origin/br-2.1.3
remotes/origin/master
批量删除git分支
初级魔法:
要删除本地,首先要考虑以下三点
列出所有本地分支
搜索目标分支如:所有含有‘dev’的分支
将搜索出的结果传给删除函数
所以我们可以得到:
git br |grep 'dev' |xargs git br -d
管道
频繁用于命令间的通信,比如此处可以将git br的结果传递给grep 'dev',其用法也是相当简单只要'|'连接两个命令即可 还有类似 ps -ef | grep 'uwsgi'的命令组合查找uwsgi的进城
grep
grep 可以用于在文件或流中查找匹配的结果,如grep 'abc' **/**.py查找当前目录下全部含有'abc'字符串的文件 并打印出结果
xargs
将前命令的执行结果作为参数传递给后一条命令。此处,我们是将所有含'dev'字符的分支名传递给git br -d
高级魔法:
删除远程分支git命令是:git push origin :dev相当于push一个空的分支覆盖远程分支 那么远程能否参考本地删除来做呢?——大体方向是对,不就是获得分支名,传给删除函数执行嘛
git br -r| grep 'dev' |xargs git push origin :
但执行结果显然和我的预期不符,系统最后执行的命令类似于这样:
git push origin origin/dev/fix:
显然 xargs 是将参数传到了:的前一位,而不是我们预期的后一位。解决的办法是?
xargs -i {} func :{}
用 {} 表示传递过来的参数填充的位置 于是我们有了:
git br -r | grep 'dev' | xargs -i {} git push origin :{}
大功告成?——自然没有。系统执行是:git push origin :origin/dev/fix 原来grep出来的结果虽然是我们需要的分支,但它包含了origin,显然git 命令不会那么聪明的识别到 所以我们只能再辛苦点把前面的origin去掉咯。找了蛮久,满足要求的命令有sed 和awk,此处就先试试awk吧
awk
awk可谓上古神器也。其用法,都能写一本书啦……因为语法复杂,花了一点临时学了下。我们的目的很简单删掉origin,下面就看看怎么用牛刀来杀鸡 awk -F '[/]' '/1\/master/ {printf "%s/%s/%s\n", $2,$3,$4}' -F,设定分隔符为/, 匹配所有1/master的分支名(注意转义/),格式化输出origin/1/master/fix 分割后$1就代表origin,$3代表master 以此类推。所以在printf中格式化输出
好绕了那么多圈,现在终于可以把所有的拼在一起,然后痛快删掉远程那二十多个分支了
git br -r |awk -F '[/]' '/1\/master/ {printf "%s/%s/%s\n", $2,$3,$4}' |xargs -I {} git push origin :{}
注:br 是branch的缩写