从远程删除大量分支
Delete large number of branches from remote
我有一个 Git 遥控器,它有 1000 个分支,我想删除名称 不是 以 foo_
开头的所有分支。有没有简单的方法可以做到这一点?
请使用以下命令删除远程服务器上所有带有 PREFIX 的分支。
git branch -r | awk -F/ '/\/PREFIX/{print }' | xargs -I {} git push origin :{}
你可以先干一下-运行看看是不是你要去掉的树枝:
git branch -r | awk -F/ '/\/PREFIX/{print }'
如果您喜欢更简单的方法,例如删除 3 或 4 个分支:
git push origin --delete <branch1> <branch2> <branch3>
更多信息:
1 - 列出所有远程分支:
$ git branch -r
2 - 通过一些正则表达式过滤分支。在这种情况下,我们有兴趣删除任何带有 'feature-' 前缀的分支:
$ git branch -r | awk -F/ '/\/feature-/{print }'
3 - 将最后一个命令传送到 git 推送以删除它们:
$ git branch -r | awk -F/ '/\/feature-/{print }' | xargs -I {} git push origin :{}
4 - 删除对这些分支的任何本地引用:
$ git remote prune origin
您应该能够列出所有不以 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
简答
如果你的遥控器叫"origin",运行
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/* | \
grep -v '^foo_\|^HEAD$' | \
xargs git push --delete origin
更多详情
比git branch
更喜欢git for-each-ref
其他答案建议将 git branch
的输出通过管道传输到 grep
或 awk
。但是,这种方法很脆弱:git branch
是瓷器(即高级)命令,其输出可能会在未来的 Git 版本中发生变化。更好的选择是使用 git for-each-ref
,一个强大的 Plumbing(即低级)命令。
命令解释
(注:以下假定您的遥控器名为"origin"。)
使用 git for-each-ref
以适当的格式列出 origin
上的所有远程分支:
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/*
将输出通过管道传输到
grep -v '^foo_\|HEAD$'
丢弃HEAD
和名称以"foo_"开头的所有分支。最后,将输出通过管道传输到
xargs git push --delete origin
一口气从origin
中删除所有相关的远程分支。
警告:当然,如果后者不是以 "foo_" 开头,则上面的命令将无法删除 远程 的当前分支。 =26=]
我有一个 Git 遥控器,它有 1000 个分支,我想删除名称 不是 以 foo_
开头的所有分支。有没有简单的方法可以做到这一点?
请使用以下命令删除远程服务器上所有带有 PREFIX 的分支。
git branch -r | awk -F/ '/\/PREFIX/{print }' | xargs -I {} git push origin :{}
你可以先干一下-运行看看是不是你要去掉的树枝:
git branch -r | awk -F/ '/\/PREFIX/{print }'
如果您喜欢更简单的方法,例如删除 3 或 4 个分支:
git push origin --delete <branch1> <branch2> <branch3>
更多信息:
1 - 列出所有远程分支:
$ git branch -r
2 - 通过一些正则表达式过滤分支。在这种情况下,我们有兴趣删除任何带有 'feature-' 前缀的分支:
$ git branch -r | awk -F/ '/\/feature-/{print }'
3 - 将最后一个命令传送到 git 推送以删除它们:
$ git branch -r | awk -F/ '/\/feature-/{print }' | xargs -I {} git push origin :{}
4 - 删除对这些分支的任何本地引用:
$ git remote prune origin
您应该能够列出所有不以 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
简答
如果你的遥控器叫"origin",运行
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/* | \
grep -v '^foo_\|^HEAD$' | \
xargs git push --delete origin
更多详情
比git branch
更喜欢git for-each-ref
其他答案建议将 git branch
的输出通过管道传输到 grep
或 awk
。但是,这种方法很脆弱:git branch
是瓷器(即高级)命令,其输出可能会在未来的 Git 版本中发生变化。更好的选择是使用 git for-each-ref
,一个强大的 Plumbing(即低级)命令。
命令解释
(注:以下假定您的遥控器名为"origin"。)
使用 git for-each-ref
以适当的格式列出 origin
上的所有远程分支:
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/*
将输出通过管道传输到
grep -v '^foo_\|HEAD$'
丢弃HEAD
和名称以"foo_"开头的所有分支。最后,将输出通过管道传输到
xargs git push --delete origin
一口气从origin
中删除所有相关的远程分支。
警告:当然,如果后者不是以 "foo_" 开头,则上面的命令将无法删除 远程 的当前分支。 =26=]