我有一个团队成员无意中将他的 150 个本地分支推送到我们的中央仓库。幸运的是,它们都有相同的前缀。使用该前缀,是否有一种 git 命令或酷炫的小型 shell 脚本可以一次性删除所有这些分支?
我尝试删除所有的origin/release/r1-1*远程分支,下面的命令行很好地工作了。
git branch -r | awk -Forigin/ '/\/*r1-1/ {print $2}' | xargs -I {} git push origin :{}
在多个远程仓库的情况下,我们可以找到一些前缀组合的好解决方案。
如果您有许多(比如数百个)分支是自动创建的,例如这种模式:build/XXXX
。此外,还有upstream
远程和派生的origin
,因此branch -r
也会返回origin/build/XXXX
和upstream/build/XXXX
。
您可以使用命令cut -f2- -d/
的解决方案。更多信息:https://unix.stackexchange.com/a/354984
干运行时,可以将安全正则表达式模式组合起来,例如:33[1-3][0-9]
或[0-9]{4}
:
git branch -r | grep -Eo "upstream/build/33[0-9][0-9]" | cut -f2- -d/ | xargs -I {} echo {}
与从上游进行真正的删除相同:
git branch -r | grep -Eo "upstream/build/33[0-9][0-9]" | cut -f2- -d/ | xargs -I {} git push upstream --delete {}