繁体   English   中英

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

[英]How to delete all remote git branches which have already been integrated?

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

由认为它是最好的(而且看起来不错)的人编辑的另一个答案

git branch -r --merged origin/master | grep -v master | grep "origin/" | cut -d "/" -f 2- | 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

您可以一次性完成此操作

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

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

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

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

这些是我用来删除所有合并到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

仅适用于 Powershell 和 Windows 用户。

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

对于 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 $_ }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM