如何删除除master以外的所有Git远程分支?

35

寻找一个用于删除Git仓库中除了主分支之外的所有分支并将它们推送到远程仓库的命令。

这是为了在发布之前清理Git仓库,因为以前的历史分支和其他所有东西都是完全的开发更改,不重要。


5
听起来有些危险,特别是如果团队正在为将来的发布版本开发新功能。你可以看看名为Git Flow的分支策略。这种策略使得一旦你完成了一个分支并将其合并,它应该被删除。https://leanpub.com/git-flow/read - dmoore1181
3个回答

75

这会删除所有分支(除了master分支),即使该分支的名称中带有斜杠 '/':

git branch -r | grep 'origin' | grep -v 'master$' | grep -v HEAD | cut -d/ -f2- | while read line; do git push origin :heads/$line; done;

这将做同样的事情,不会更改developmaster分支:

git branch -r | grep 'origin' | grep -v 'master$' | grep -v 'develop$' | grep -v HEAD | cut -d/ -f2- | while read line; do git push origin :heads/$line; done;

这是fish shell的脚本:

git branch -r | grep 'origin' | grep -v 'master$' | grep -v 'develop$' | grep -v HEAD | cut -d/ -f2- | while read line; git push origin :heads/$line; end;

这会要求每个分支输入密码。 - Jones G
1
此解决方案将运行多个 git push origin ... 命令,每个命令用于删除一个分支。如果您的 git 配置要求每次 git push 进行身份验证,而这不是您想要的,您可以考虑使用 SSH auth 或查看您的 git 配置。我使用非交互式身份验证进行 git push,因此上述命令可以在没有任何干预或额外步骤的情况下执行。正如他们所说,YMMV。 - staxim
太棒了,我的朋友。 - Florin
最佳答案在这里。 - Hvitis
git branch -r | grep 'origin' | grep -v 'main$' | grep -v HEAD | cut -d/ -f2- | while read line; do git push origin :heads/$line; done; 将远程分支列表筛选出以"origin"开头的分支,排除名为"main"和"HEAD"的分支,然后截取分支名称的第二部分至末尾,并逐行执行以下操作:将本地分支与远程分支解绑并删除。 - Rami
由于我的存储库中的一些分支包含单词“master”(例如“feature/my-integration-master”),我不得不稍微调整语法:git branch -r | grep 'origin' | grep -v 'origin/master$' | grep -v HEAD | cut -d/ -f2- | while read line; do git push origin :heads/$line; done; - Dan Nolan

1

最后,以下命令对我非常有效,您可以根据进一步的要求进行调整。

git branch -r | grep origin/ | grep -v 'master$' | grep -v HEAD| cut -d/ -f2 | while read line; do git push origin :$line; done;

6
为什么不直接批准 @staxim 的答案,你的答案与他的相同,只需在他下面写一个注释,将 origin' 改为 origin/ - stanimirsp
2
这是先前答案的副本。请只点赞那个答案,而不要重复它。 - RichieHH
5
我可能漏掉了一些东西,但看起来willsteel的答案是在他问问题的那天发布的,而staxim的答案则是几个月后发布的。如果staxim编辑了willsteel的答案而不是发表自己的答案,似乎会更好。 - takanuva15
我一直都在使用这个,哈哈。 - Rami

-3
可以使用以下命令,它将删除除主分支和当前分支之外的所有分支。 git branch | grep -v "master\|$(git branch --show-current)" | xargs git branch -D

2
这将删除本地分支,作者询问远程分支。 - Danon
1
最好先阅读问题,而不是给出可能危险的答案。这将移除本地分支,避免潜在破坏数周工作的风险。 - RichieHH
这实际上是我正在寻找的,尽管它没有回答问题哈哈。 - takanuva15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接