我想清理我的本地存储库,它有大量的旧分支:例如3.2、3.2.1、3.2.2等。

我希望有个鬼鬼祟祟的办法能一次性把他们干掉。因为它们大多遵循点释放约定,我想也许有一个捷径可以说:

git branch -D 3.2.*

并杀死所有3.2。x分支。

我尝试了这个命令,当然,它不起作用。


当前回答

Powershell的解决方案:

如果你正在运行窗口,你可以使用PowerShell一次删除多个分支…

git branch -D ((git branch | Select-String -Pattern '^\s*3\.2\..*') | foreach{$_.ToString().Trim()})
//this will remove all branches starting with 3.2.

git branch -D ((git branch | Select-String -Pattern 'feature-*') | foreach{$_.ToString().Trim()})
// this will delete all branches that contains the word "feature-" as a substring.

您还可以使用Powershell的Select-String命令对模式匹配的工作方式进行微调。看一下powershell文档。

其他回答

git branch  | cut -c3- | egrep "^3.2" | xargs git branch -D
  ^                ^                ^         ^ 
  |                |                |         |--- create arguments
  |                |                |              from standard input
  |                |                |
  |                |                |---your regexp 
  |                |
  |                |--- skip asterisk 
  |--- list all 
       local
       branches

编辑:

一个更安全的版本(由Jakub narabbski和Jefromi建议),因为git分支输出并不用于脚本:

git for-each-ref --format="%(refname:short)" refs/heads/3.2\* | xargs git branch -D

... 或者xargs-free:

git branch -D `git for-each-ref --format="%(refname:short)" refs/heads/3.2\*`

如果你不局限于使用git命令提示符,那么你总是可以运行git gui并使用Branch->Delete菜单项。选择所有你想删除的分支,让它撕裂。

我的具体情况没有解决,所以我重新回答…

场景:

新克隆的回购 未创建本地分支 许多远程分支(在我的例子中超过100个) 我想从远程删除所有的特征分支,feature/myfeature

这是我在工作中得到的命令:

git branch  -a | cut -c3- | grep 'origin\/feature' | sed 's/remotes\/origin\///' | xargs git push origin --delete

感谢@gwai让我走上正轨。

要根据指定的模式删除多个分支,请执行以下操作:

打开终端或同等工具,输入以下命令:

git branch | grep "<pattern>" (preview of the branches based on pattern)

git branch | grep "<pattern>" | xargs git branch -D (replace the <pattern> with a regular expression to match your branch names)

删除所有3.2。X个分支,你需要输入

git branch | grep "3.2" | xargs git branch -D

这是所有!

你可以开始了!

这对我来说是正确的:

git branch | xargs git branch -d

git branch | xargs git branch -D

删除所有本地分支