如何在没有别名的情况下在一个命令中删除除 master 和 develop 之外的所有本地分支?

How to delete all local branches except master and develop in one command without aliases?

当使用 Git Flow 或存在多个稳定分支的类似工作流程处理项目时,我创建了许多功能分支(feature/do-something-1hotfix/fix-bug-1 等)。

有时我需要清除本地分支机构的列表,因为用几十个基本分支机构管理它们实际上是不可能的。我通常通过将分支名称复制并粘贴到 git branch -d 命令中来一次删除它们。但这需要很长时间,以至于删除整个存储库并再次克隆更容易。

我想在一个命令中删除除masterdevelop之外的所有(不写额外的shellscript/aliases),但我在互联网上找到的所有解决方案都只允许您删除除一个分支之外的所有内容(例如 master)。这不是一个合适的解决方案。有人遇到过类似的问题吗?

让我们分步进行,这样我们就可以分解命令并理解它的作用:

 git branch | grep -v " master$" | grep -v " develop$" | xargs git branch -D

注意:您不能删除当前签出的分支。

循序渐进:

zrrbite@ZRRBITE MINGW64 /d/dev/branch_del_test (master)
$ git branch
  develop
* master
  test
  test2

zrrbite@ZRRBITE MINGW64 /d/dev/branch_del_test (master)
$ git branch | grep -v " master$"
  develop
  test
  test2

zrrbite@ZRRBITE MINGW64 /d/dev/branch_del_test (master)
$ git branch | grep -v " master$" | grep -v " develop$"
  test
  test2

zrrbite@ZRRBITE MINGW64 /d/dev/branch_del_test (master)
$ git branch | grep -v " master$" | grep -v " develop$" | xargs git branch -D
Deleted branch test2 (was 7767978). <-- only the output of the last xargs run is shown

zrrbite@ZRRBITE MINGW64 /d/dev/branch_del_test (master)
$ git branch
  develop
* master

这是相同答案的更简单变体:

git branch -D $(git branch | grep -v -e "master$" -e "develop$")