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

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

git branch -D 3.2.*

并杀死所有3.2。x分支。

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


当前回答

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

场景:

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

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

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

感谢@gwai让我走上正轨。

其他回答

如果你想删除多个分支进行清理,这是可行的

 git branch -d branch1 branch2 branch3

此外,如果你想反映删除操作到远程,你可以使用这个来推送它们

 git push origin --delete branch1 branch2 branch3

如果你在windows上,你可以使用powershell来做这个:

 git branch | grep 'feature/*' |% { git branch -D $_.trim() }

用你喜欢的图案替换feature/*。

我把我的首字母和破折号(at-)作为分支名称的前三个字符,原因如下:

git branch -D `git branch --list 'at-*'`

基于@gawi(上面)提供的答案,我做了一个可能有用的小函数。

removeBranchesWithPrefix() {
  git for-each-ref --format="%(refname:short)" refs/heads/$1\* | xargs git branch -d
}

将其添加到.bash_profile并重新启动终端。然后你可以像这样从命令行调用:

removeBranchesWithPrefix somePrefix

Note

我有它目前设置为软删除,这意味着它不会删除分支,除非他们已经合并。如果你喜欢在边缘上生活,将-d更改为-d,它将删除所有带有前缀的东西!

保持“开发”,并删除所有其他在本地

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