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

时间:2011-11-22 15:57:49

标签: git git-branch

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

6 个答案:

答案 0 :(得分:40)

另一个人认为这是最好的(并且看起来很棒)

git branch -r --merged origin/master | grep -v master | grep "origin/" | cut -d "/" -f 3- | xargs -n 20 git push --delete origin

说明:

  • 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)。

<子> 1。请注意,这也会删除origin/HEAD -> origin/master,但您仍然不希望混淆origin/HEAD

原始回答:

git push --delete remote topicbranch

git push remote :topicbranch

给出一个分支列表,将是git branch --merged master

答案 1 :(得分:14)

您可以一次性使用

执行此操作
git branch --merged master | grep -v master | xargs -n 1 git push --delete origin

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

答案 2 :(得分:11)

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

仅适用于Powershell和Windows用户。

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

答案 5 :(得分:0)

对于 Windows 机器,我使用这个 PowerShell oneliner 在我们的构建系统上使用 Windows 计划任务每​​周清理所有合并的远程 git 分支:

git branch --all --merged remotes/origin/master | Select-String -NotMatch "master" | Select-String -NotMatch "HEAD" | Select-String "remotes/origin/" | Foreach-Object { $_.ToString().Replace("remotes/origin/", "").Trim() } | Foreach-Object { git.exe push origin --delete $_ }

备注:它结合了大部分已经给出的答案,但没有限制分支清理的数量。