2011-11-22 188 views
26

在工作中,我们正在使用主题分支,这些主题分支在某个时间点被集成到几个(3)主分支中。 现在我想从我的远程存储库中删除已完全集成到主分支中的所有主题分支。如果这是不可能的,检索已整合的本地分行清单也可以。如何删除已经集成的所有远程git分支?

回答

35

编辑:

从skalee的评论

最佳答案:

git branch -a --merged remotes/origin/master | grep -v master | grep "remotes/origin/" | cut -d "/" -f 3- | xargs -n 1 git push --delete origin 

老答案:

git push --delete remote topicbranch 

git push remote :topicbranch 

给予新的分支,将一些与git branch --merged master

+1

谢谢,'git branch --merged'看起来不错。不幸的是,它不能在整合过程中重新分配的分支机构正常工作..但是,至少*我的shitload(160)分支机构被列为超级安全删除。 – ThiefMaster

+0

重新构建的分支是棘手的......这可能是可能的,但它至少需要在分支点之后拉取修订列表,然后沿着主分支寻找修补程序签名的shellscript ...我没有意识到这个预煮解决方案。 –

+0

这是太棒了,虽然我确实碰到了小障碍。我用'/'命名我的分支,例如我的一个分支名称可能是'sf/correct-typo-7'。由于** cut **上的'-f 3'参数,此分支名称将被截断为'sf'。将参数改为'-f 3-',可以解决这个问题,并用任意数量的斜线处理分支。 –

14

您可以

git branch --merged master | grep -v master | xargs -n 1 git push --delete origin 

自卸这样做是一气呵成,在一个脚本调用“干净”的,如果你发现你这样做经常。

+12

如果你想删除所有的远程分支,不仅有那些有本地对应的分支:'git branch -a --merged remotes/origin/master | grep -v master | grep“remotes/origin /”| cut -d“/”-f 3 | xargs -n 1 git push --delete origin'。另外,我建议使用'remotes/origin/master'代替普通的'master'来排除你在本地合并但尚未推送的东西,以防最终忘记或决定不推送。 – skalee

+2

@skalee谢谢!除了当分支在文件夹中时,这对我有效 - 改用'cut -d“/”-f 3-'。我还必须添加一个'grep -v develop'来停止它试图删除我的开发分支。 – antonyh

+0

'xargs -n 1'太慢了,如果你有很多分支使用'xargs -n 20'代替。 – mozillazg

9

如果您想从原点库中删除远程分支:

git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin 
+0

这也有助于消除叉后的所有上游分支 – ianstarz

+0

这是真正正确的答案:),因为其他人似乎无法删除包括斜杠,我们使用(混合虽然)功能/我的功能, bugfix/my-feature –

+0

这看起来相当不错,除了使用origin/master或origin/develop作为可以删除某些东西的标准之外,这一点非常重要。仅仅因为将它合并到本地版本的主分支中而从远程删除某些东西是不行的,那么您可能忘记将该分支推送到远程,这可能意味着从源删除未分支的分支。 –

1

这些都是我使用删除一切融入origin/master的命令。基本上,我从GitHub中删除了合并到master的所有分支。

git remote update -p && 
git branch -r --merged origin/master | 
grep origin | 
grep -v master | 
cut -d"/" -f2- | 
xargs git push origin --delete 
0

只适用于Powershell和Windows用户。

git branch -r --merged | findstr /v "origin/master" | %{git push origin --delete $_.Trim().Substring(7)} 
相关问题