从远程删除大量分支

Ram*_*hum 4 git git-push remote-branch

我有一个有 1000 个分支的 Git 远程服务器,我想删除所有名称foo_. 有没有简单的方法可以做到这一点?

jub*_*0bs 5

简短回答

如果您的遥控器名为“origin”,请运行

git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/* | \
  grep -v '^foo_\|^HEAD$' | \
  xargs git push --delete origin
Run Code Online (Sandbox Code Playgroud)

更多细节

git for-each-ref更喜欢git branch

其他答案建议将git branchtogrep或的输出通过管道传输awk。然而,这种方法很脆弱:git branch是一个 Porcelain(即高级)命令,其输出可能会在未来的 Git 版本中发生变化。更好的替代方法是使用git for-each-ref强大的管道(即低级)命令。

命令解释

(注意:以下假设您的遥控器名为“origin”。)

用于以适当的格式git for-each-ref列出所有远程分支:origin

git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

将输出通过管道传输到

grep -v '^foo_\|HEAD$'
Run Code Online (Sandbox Code Playgroud)

丢弃HEAD所有名称以“foo_”开头的分支。最后,将输出通过管道传输到

xargs git push --delete origin
Run Code Online (Sandbox Code Playgroud)

origin一举删除所有相关的远程分支。

注意:当然,如果远程分支不以“foo_”开头,上面的命令将无法删除远程分支的当前分支。