在工作中,我们使用的主题分支在某些时候被集成到少数(3)主分支中。 现在,我想删除已完全集成到主分支中的远程存储库中的所有主题分支。如果那是不可能的,那么检索已经集成的本地分支列表也没问题。
答案 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 $_ }
备注:它结合了大部分已经给出的答案,但没有限制分支清理的数量。