批量删除远程分支

Git

初衷

分支遗留太多了,删除远程没有用的分支。

过程

第一个是把所有合并到master过的分支名字都列出来。

1
git branch -r --merged master

列出来可能是这样的

1
2
3
origin/branchA
origin/branchB
origin/branchC

列出来之后处理一下,处理成

1
:branchA :branchB :branchC

这一步可以保留不想删掉的分支

然后执行

1
git push origin :branchA :branchB :branchC

本来以为这样就可以了,但是发现并不行,会报错

error: unable to delete ‘branchB’: remote ref does not exist

这样这些报错分支删除不了,整个操作也执行失败,这样就需要把报错的分支名去掉,就变成了

1
git push origin :branchA :branchC

但是我的分支太多了,借助一段代码实现删掉错误的分支,首先把要删除的分支,和报错的分支弄成数组,然后在Chrome的控制台执行一下,就能得到过滤掉的数组了,然后再转换成我们想要的格式。

PS: 借助于Command + D来实现;

1
2
3
4
5
6
7
8
9
10
11
for (var i = b.length - 1; i >= 0; i--) {
x = b[i];
for (var j = a.length - 1; j >= 0; j--) {
y = a[j];
if (x == y) {
b.splice(i, 1);
a.splice(j, 1);
break;
}
}
}

这样执行之后就得到这样的结果

1
2
3
To gitlab.tdc.shangri-la.com:mobile/shangrila_reactNative.git
- [deleted] branchA
- [deleted] branchC

这样很爽

这时执行一下

1
git branch -a

你会发现,这些分支还有,这个时候需要执行一下

1
git remote prune origin

得到如下结果

1
2
3
URL: git@gitlab.tdc.shangri-la.com:mobile/shangrila_reactNative.git
* [pruned] origin/branchA
* [pruned] origin/branchC

这个时候才算真正地清理完成