从远程删除大量分支

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 的输出通过管道传输到 grepawk。但是,这种方法很脆弱: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=]