我有一个拥有1000个分支的Git远程,我想删除名称不以foo_
开头的所有分支。有一个简单的方法吗?
答案 0 :(得分:3)
如果您的遥控器被调用"来源",请运行
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/* | \
grep -v '^foo_\|^HEAD$' | \
xargs git push --delete origin
git for-each-ref
1}} 其他答案建议将git branch
的输出汇总到git branch
或grep
。但是,这种方法容易出错并且很脆弱:awk
是一个瓷器(即高级)命令,其输出可能会在未来的Git版本中发生变化。一个更好的选择是使用git for-each-ref
,一个强大的管道(即低级)命令。
(注意:以下假定您的遥控器被称为"原点"。)
使用git branch
以适当的格式列出git for-each-ref
上的所有远程分支:
origin
将输出传输到
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/*
放弃grep -v '^foo_\|HEAD$'
以及名称以" foo _"开头的所有分支。最后,将输出传递给
HEAD
一举删除xargs git push --delete origin
的所有相关远程分支。
警告:当然,如果后者没有以" foo _"
答案 1 :(得分:1)
请使用以下命令删除远程服务器上PREFIX的所有分支。
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
你可能想先做一个干运行,看看它是否是你要删除的分支:
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
如果您喜欢更简单的方法,例如删除3或4个分支:
git push origin --delete <branch1> <branch2> <branch3>
您的进一步信息:
1 - 列出所有远程分支:
$ git branch -r
2 - 通过一些正则表达式过滤分支。在这种情况下,我们有兴趣删除任何带有'feature-'前缀的分支:
$ git branch -r | awk -F/ '/\/feature-/{print $2}'
3 - 将最后一个命令传递给git push以删除它们:
$ git branch -r | awk -F/ '/\/feature-/{print $2}' | xargs -I {} git push origin :{}
4 - 删除对这些分支的任何本地引用:
$ git remote prune origin
答案 2 :(得分:1)
您应该能够列出所有不以foo_开头的远程分支:
git branch -l -r|grep -v 'origin/foo_'
如果看起来没问题可以删除,可以使用xargs将输出重定向到git push origin --delete
命令:
git branch -l -r|grep -v 'origin/foo_'|xargs git push origin --delete