我想清理我的本地存储库,它有大量的旧分支:例如3.2、3.2.1、3.2.2等。
我希望有个鬼鬼祟祟的办法能一次性把他们干掉。因为它们大多遵循点释放约定,我想也许有一个捷径可以说:
git branch -D 3.2.*
并杀死所有3.2。x分支。
我尝试了这个命令,当然,它不起作用。
我想清理我的本地存储库,它有大量的旧分支:例如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
这个解决方案非常棒,如果你想要每个命令的完整解释以及它是如何工作的,可以在这里给出。
其他回答
我今天刚刚清理了一大批过时的本地/远程分支机构。
以下是我的做法:
1. 列出所有分支名称到一个文本文件:
git branch -a >> BranchNames.txt
2. 附加我想删除的分支到命令"git branch -D -r":
git branch -D -r origin/dirA/branch01 origin/dirB/branch02 origin/dirC/branch03(…附加任何分支名称)
3.执行CMD命令
这一个比“git push origin -delete”工作得更快更可靠。
这可能不是其他答案中列出的最聪明的方法,但这个方法非常直接,而且易于使用。
也许你会发现这很有用:
如果你想删除所有不是'master', 'foo'和'bar'的分支
git branch -D `git branch | grep -vE 'master|foo|bar'`
Grep -v 'something'是一个带有反转的匹配器。
因为在Git中,所有的分支都没有引用到Git repo,为什么不删除指向. Git /ref的分支,然后如果有任何在存储库中不感兴趣的东西被遗漏了,就会自动被垃圾收集,所以你不需要麻烦。
嗯,在最坏的情况下,你可以用:
git branch | grep '3\.2' | 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,它将删除所有带有前缀的东西!