如何删除除master之外的所有本地分支并在一个没有别名的命令中开发?

Posted

技术标签:

【中文标题】如何删除除master之外的所有本地分支并在一个没有别名的命令中开发?【英文标题】:How to delete all local branches except master and develop in one command without aliases? 【发布时间】:2022-01-04 01:41:31 【问题描述】:

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

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

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

【问题讨论】:

为什么你不能将你发现的删除除一个分支之外的所有分支调整为删除除两个分支之外的所有分支? 【参考方案1】:

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

 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

【讨论】:

非常好的答案。您能否简要解释一下答案中的命令?如果我们想修改此命令以用于其他用途,这将很有帮助。谢谢。 我已经通过逐步执行命令更新了答案。【参考方案2】:

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

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

【讨论】:

以上是关于如何删除除master之外的所有本地分支并在一个没有别名的命令中开发?的主要内容,如果未能解决你的问题,请参考以下文章

git 大型灾难现场

git clone

在 MS Access (2007-2013) 中删除除一个之外的所有表

如何从表中删除除前两个和最后一个之外的所有行?

git 使用

如何删除 Core Data 存储中除一个对象之外的所有对象?