在工作中,我们使用主题分支(topic branches),这些分支最终会被整合到几个(3个)主分支(master branch)中。 现在,我想从我的远程代码仓库中删除所有已完全整合到主分支中的主题分支。如果不可能的话,也可以返回一个已整合的本地分支列表。
在工作中,我们使用主题分支(topic branches),这些分支最终会被整合到几个(3个)主分支(master 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
看起来不错。不幸的是,在集成过程中已经被 rebase 的分支无法正常工作...但好吧,至少我的一些(160)分支被列为超级安全可删除。 - ThiefMastercut -d "/" -f 2-
,但实际上命令是 cut -d "/" -f 3-
。 - lolsky你可以一步完成这个操作,使用
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
,以排除您已经在本地合并但尚未推送的内容,以防您最终忘记或决定不推送。 - skaleecut -d "/" -f 3-
。我还必须添加一个 grep -v develop
来防止它尝试删除我的 dev 分支。 - antonyh如果您想从源代码库中删除远程分支:
git branch -r --merged develop | egrep -iv '(master|develop)' | sed 's/origin\///g' | xargs -n 1 git push --delete origin
仅适用于PowerShell和Windows用户。
git branch -r --merged | findstr /v "origin/master" | %{git push origin --delete $_.Trim().Substring(7)}
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
对于 Windows 系统,我使用这个 PowerShell 一行命令来清理所有合并的远程 Git 分支,我们会在构建系统上使用 Windows 计划任务来每周执行此操作:
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 $_ }
备注:它结合了已经给出的大部分答案,但没有限制分支清理的数量。