我有一个包含1000个分支的Git远程仓库,我想删除所有名称不以foo_
开头的分支。有没有简单的方法可以实现这一目标?
我有一个包含1000个分支的Git远程仓库,我想删除所有名称不以foo_
开头的分支。有没有简单的方法可以实现这一目标?
如果你的远程仓库被称为“origin”,运行以下命令:
git for-each-ref --format='%(refname:strip=3)' refs/remotes/origin/* | \
grep -v '^foo_\|^HEAD$' | \
xargs git push --delete origin
git for-each-ref
而不是git branch
其他答案建议将git branch
的输出导入到grep
或awk
中。然而,这种方法很脆弱:git branch
是一种瓷器(即高级)命令,其输出可能会在未来的Git版本中发生变化。更好的选择是使用git for-each-ref
,这是一个功能强大的管道(即低级)命令。
(注意:以下假设你的远程分支名为“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_" 开头时,上述命令将无法删除当前分支。
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
您可能希望先进行干运行,以查看您要删除的是哪些分支:
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
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
git branch -l -r|grep -v 'origin/foo_'
git push origin --delete
命令:git branch -l -r|grep -v 'origin/foo_'|xargs git push origin --delete
xargs git
命令不需要额外的 -r
标志来删除远程分支吗? - Wim Mostmans
for-each-ref
,看起来更好。 - Ram Rachum*
已经被Bash扩展了... - jub0bs.git
文件夹内部,否则Bash如何扩展*
?因为存储库根目录中没有refs
文件夹。 - Ram Rachum