【发布时间】:2012-01-04 00:14:27
【问题描述】:
在工作中,我们使用主题分支,这些分支有时会集成到几 (3) 个主分支中。 现在我想从我的 remote 存储库中删除所有已完全集成到主分支中的主题分支。如果这不可能,检索已集成的本地分支列表也可以。
【问题讨论】:
标签: git git-branch
在工作中,我们使用主题分支,这些分支有时会集成到几 (3) 个主分支中。 现在我想从我的 remote 存储库中删除所有已完全集成到主分支中的主题分支。如果这不可能,检索已集成的本地分支列表也可以。
【问题讨论】:
标签: git git-branch
有人认为这是最好的(而且看起来不错)编辑的另一个答案:
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 看起来不错。不幸的是,它不适用于在集成过程中重新设置的分支。但好吧,我的shitload (160) 个分支中至少有 一些 被列为超级安全的删除。
/ 命名我的分支,例如我的分支名称之一可能是sf/correct-typo-7。由于 cut 上的 -f 3 参数,此分支名称将被截断为 sf。将参数更改为-f 3-,更正此问题并处理带有任意数量斜杠的分支。
-n 1)怎么办?
--delete?并不是说我每天都进行批量删除……
您可以一次性完成此操作
git branch --merged master | grep -v master | xargs -n 1 git push --delete origin
如果您发现自己经常这样做,请将其转储到名为“clean”的脚本中。
【讨论】:
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 来排除您在本地合并但尚未推送的内容,以防您最终忘记或决定不推送。
cut -d "/" -f 3-。我还必须添加 grep -v develop 以阻止它尝试删除我的 dev 分支。
xargs -n 1 太慢了,如果你有很多分支,请改用xargs -n 20。
如果要从源存储库中删除远程分支:
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 $_ }
备注:它结合了大多数已经给出的答案,但没有限制分支清理的数量。
【讨论】: