如何删除已经集成的所有远程git分支?

Thi*_*ter 32 git git-branch

在工作中,我们使用的主题分支在某些时候被集成到少数(3)主分支中.现在我想从我的远程存储库中删除已完全集成到主分支中的所有主题分支.如果那是不可能的,那么检索已经集成的本地分支列表也会没问题.

Mic*_*ker 44

另一个人认为这是最好的(并且它看起来不错):

git branch -r --merged origin/master | grep -v master | grep "origin/" | cut -d "/" -f 3- | xargs -n 20 git push --delete origin
Run Code Online (Sandbox Code Playgroud)

说明:

  • git branch -r --merged origin/master
    • -r/ --remotes列出远程跟踪分支.
    • --merged origin/master只列出可以从中获取提示的分支origin/master.
  • grep -v master删除包含master列表的任何分支名称.1 -v表示否定匹配.
  • grep "origin/"只选择origin远程分支.
  • cut -d "/" -f 2-删除origin/前缀
  • xargs -n 20 git push --delete origin 做类似的事情 git push --delete origin branch-a branch-b branch-c …
    • -n 20/ --max-args=20每个命令行最多使用20个参数.

至于-n,我只选择20作为例子.较少的参数会使它变慢,例如-n 1让它一次删除一个; 您有更多进度提示,因为每次删除分支时都会报告.更多的参数-n 200会使它更快(更少的总时间),但它只报告每200个分支一次,让你认为它一开始就被冻结(虽然它不是).根据需要调整数量.如果省略此选项,则默认数字非常大(我的机器中为2048).

请注意,这也会删除origin/HEAD -> origin/master,但origin/HEAD无论如何你都不想搞砸.

原始答案:

git push --delete remote topicbranch
Run Code Online (Sandbox Code Playgroud)

要么

git push remote :topicbranch
Run Code Online (Sandbox Code Playgroud)

给出一个分支列表,就可以了 git branch --merged master


Ada*_*ruk 14

你可以一起做

git branch --merged master | grep -v master | xargs -n 1 git push --delete origin
Run Code Online (Sandbox Code Playgroud)

如果您发现经常这样做,请将其转储到名为"干净"的脚本中.

  • 如果你想删除所有远程分支,不仅仅是那些拥有本地对应分支的分支:`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`来排除你在本地合并但尚未推送的内容,万一你最终忘记或决定不推. (12认同)
  • @skalee谢谢!这对我有用,除非分支在文件夹中 - 使用`cut -d"/" - f 3 -`代替.我还必须添加一个`grep -v develop`来阻止它试图删除我的dev分支. (2认同)

小智 11

如果要从源存储库中删除远程分支:

git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin
Run Code Online (Sandbox Code Playgroud)