2017-08-10 126 views
1

我有几个回收,我想清理,他们有数百个已经合并到主的分支机构。这是我到目前为止git branch -r --merged | grep -v master | xargs git push origin --delete 我一直未能得到的问题是匹配的分支名单返回为origin/branchname,但git命令必须是git push origin --delete branchname,我无法删除origin/的一部分每行将它传递给xargs。 到目前为止,我已经拿到了这份清单,并使用了崇高的文字让我获得了最后10%的方式,但我想知道如何做到最后一部分,而不需要离开终端,并生成一个很长的个人命令只是把它们放回终端。如何清理已经合并的远程git分支?

我试过使用grep -osed但这两种方法都没有奏效。我在Mac OS X系统上使用控制台。

我有以下的远程分支机构回来从git branch -r --merged

origin/HEAD -> origin/master 
origin/master 
origin/feature/DEV-1122 
origin/release/1.0 
origin/release/1.1 

要清理release/1.0分支远程我需要下面的命令:

git push origin --delete release/1.0 

但命令git branch -r --merged | grep -v master | xargs git push origin --delete将产生以下命令:

git push origin --delete origin/release/1.0 

我需要能够从git branch -f --merged命令中去除origin/输出。

回答

1

试试这个:

git branch -r --merged | grep -v master | cut -d'/' -f2 | xargs git push origin --delete 

要第一/后显示整条生产线,使用:

git branch -r --merged | grep -v master | cut -d'/' -f2- | xargs git push origin --delete 
+0

那是相当接近!我还想在第一个'/'之后包含其余的行,所以如果你将cut命令更新为'cut -d'/'-f2-'我将其标记为答案:) – rodmunera

+0

对于脚本,你应该使用管道命令(即'for-each-ref'而不是'branch')。 'git for-each-ref --merged | grep -v master | grep refs \/remotes \/origin \/| cut -d'/'-f4-'是一个很好的起点 –

+0

使用管道的优点是在这种情况下的瓷器?分支中是否存在某些会导致某些边缘情况出现问题的内容? – rodmunera