我想清理我的本地存储库,它有大量的旧分支:例如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分支。
我尝试了这个命令,当然,它不起作用。
当前回答
我把我的首字母和破折号(at-)作为分支名称的前三个字符,原因如下:
git branch -D `git branch --list 'at-*'`
其他回答
我的具体情况没有解决,所以我重新回答…
场景:
新克隆的回购 未创建本地分支 许多远程分支(在我的例子中超过100个) 我想从远程删除所有的特征分支,feature/myfeature
这是我在工作中得到的命令:
git branch -a | cut -c3- | grep 'origin\/feature' | sed 's/remotes\/origin\///' | xargs git push origin --delete
感谢@gwai让我走上正轨。
Use
git for-each-ref --format='%(refname:short)' 'refs/heads/3.2.*' |
xargs git branch -D
这里有一个一般的解决方案:
git branch | grep "<pattern>" | xargs git branch -D
我建议在执行上述命令之前运行以下命令行,预览将要删除的分支。
git branch | grep "<pattern>"
在这种情况下
git branch | grep "^3\.2\..*" | xargs git branch -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.
如果你不局限于使用git命令提示符,那么你总是可以运行git gui并使用Branch->Delete菜单项。选择所有你想删除的分支,让它撕裂。