我想清理我的本地存储库,它有大量的旧分支:例如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 GUI(这是Windows的默认附加组件),那么它是最简单的。可以使用“ctrl”键选择多个分支,一键删除。
其他回答
我把我的首字母和破折号(at-)作为分支名称的前三个字符,原因如下:
git branch -D `git branch --list 'at-*'`
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\*`
如果你正在使用Fish shell,你可以利用字符串函数:
git branch -d (git branch -l "<your pattern>" | string trim)
这与其他一些答案中的Powershell选项没有太大区别。
基于@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 -d branch1 branch2 branch3
此外,如果你想反映删除操作到远程,你可以使用这个来推送它们
git push origin --delete branch1 branch2 branch3