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

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

git branch -D 3.2.*

并杀死所有3.2。x分支。

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


当前回答

最近,我在寻找同样问题的解决方案,最后我找到了一个答案,它工作得很好:

打开终端,或等价的。 输入git分支| grep " pattern "预览分支 这将被删除。 输入git branch | grep " pattern " | xargs git branch -D

这个解决方案非常棒,如果你想要每个命令的完整解释以及它是如何工作的,可以在这里给出。

其他回答

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

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

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

removeBranchesWithPrefix somePrefix

Note

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

因为在Git中,所有的分支都没有引用到Git repo,为什么不删除指向. Git /ref的分支,然后如果有任何在存储库中不感兴趣的东西被遗漏了,就会自动被垃圾收集,所以你不需要麻烦。

使用以下命令删除所有分支(签出的分支不会被删除)。

git branch | cut -d '*' -f 1 | tr -d " \t\r" | xargs git branch -d

编辑:我用的是Mac Os

如果你真的需要清理所有的树枝,那就试试

Git分支-d $

它将删除所有本地合并分支,除了您当前签入的分支。

这是一个让你的地方变得干净的好方法

博士TL;

git branch -D $(git branch | grep '3\.2\. *')

解释

git branch lists all the branches on your local system. grep '3\.2\..*' uses pattern matching to find all files in the current working directory starting with 3.2.. Using \ to escape . as it's a special character for grep. git branch | grep '3\.2\..*' will pass all the github branch names to the grep command which will then look for branch names starting with the string within the list supplied. $(git branch | grep '3\.2\..*') Anything enclosed within $() will run it as a separate shell command whose result can then be passed on to a separate command. In our case, we would want the list of files found to be deleted. git branch -D $(git branch | grep '3\.2\..*') This just does what is explained above in Point 4.