如何在git中删除以字母“o”开头的分支?
假设我有以下分支列表:
origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma
我想要删除分支 origin_alpha、origin_beta 和 origin_gamma。
xargs
的-r
选项是GNU的附加功能。除非您使用来自GNU findutils的xargs
,否则它可能无法正常工作。您可以省略它,但如果输入传输到xargs为空,则会导致错误。
git branch --list <pattern>
并将其输出导入xargs git branch -d
:git branch --list 'o*' | xargs -r git branch -d
顺便提一下,上面的代码有一个小问题。如果你当前检出的分支以o
开头,那么git branch --list 'o*'
的输出将会是这样:
* origin_master
origin_test
o_what_a_branch
请注意当前分支名称前面的星号*
。
虽然您无论如何都不能删除当前分支,但这会导致xargs也将*
传递给git branch delete
。
正如我所说,这只是一个表面上的错误,但如果您想避免它,请使用:
git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d
git branch -d <branch>
也不会起作用。 ;) 这就是为什么我忽略了它的原因。 - hek2mgl-r
参数(会显示“illegal option -- r”错误信息),但是没有加这个参数也能够满足预期的目的。 - Amy Pellegrinigit branch --list 'hotfix'
不会显示任何内容,但是 git branch --list "hotfix"
可以解决问题。 - PandaWood另一种方式可能是这样的:
git branch -d $(git branch | grep yourSearchPattern)
对我来说,使用grep更直观,因为我每天都在使用它。
您还可以创建一个别名(或任何其他建议的解决方案的别名),例如在此处查看如何将参数传递给别名: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
附注:在您的特定情况下,yourSearchPattern可能是origin:
git branch -d $(git branch | grep origin)
作为下一步,让删除过程更加详细说明也是很不错的,例如每个分支都需要确认删除,但我认为这超出了问题的范围...
git branch -d $(git branch | grep hotfix)
失败并显示 error: branch '$(git' not found
。 - PandaWood$()
在 Win 中是否被正确识别?似乎 git 正试图删除分支 $(git
而不是用命令输出替换它。 - lzzlucagit branch -D $(git branch --list 'regex_here')
git branch -D $(git branch --list 'aputhen/*')
aputhen/
开头的分支。git branch -d `git branch | grep substring`
并且对于当前的问题
git branch -d `git branch | grep origin`
这将会删除所有名称中包含 origin 的分支。
在PowerShell(Windows)中添加我使用的脚本
Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }
git branch -d origin_alpha
- kvdvo*
而不是3.2*
。请参考答案 https://dev59.com/DHA65IYBdhLWcg3wuRF8#28614187。 - cmbuckley