git 如何删除名称与特定模式匹配的分支

olmpazwi  于 2023-01-19  发布在  Git
关注(0)|答案(5)|浏览(146)

如何删除git中以字母'o'开头的分支?
假设,我有一个分支列表如下:

origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma

我不想删除分支origin_alphaorigin_betaorigin_gamma

g52tjvyc

g52tjvyc1#

更新:xargs-r选项是一个GNU插件。除非你使用GNU findutils中的xargs,否则它可能不起作用。你可以忽略它,但是如果xargs的输入为空,这会导致错误。
可以使用git branch --list <pattern>并将其输出通过管道传输到xargs git branch -d

git branch --list 'o*' | xargs -r git branch -d

顺便说一句,上面的代码有一个小问题,如果你当前 checkout 了一个以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
tkclm6bt

tkclm6bt2#

另一种方式可能是这样的:

git branch -d $(git branch | grep yourSearchPattern)

对我来说看起来更直观,因为grep是我每天使用的东西。
你也可以为它创建一个别名(或者这里建议的任何解决方案),例如这里检查如何将参数传递给别名:http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
PS在您的特定情况下,您的搜索模式可以是来源:

git branch -d $(git branch | grep origin)

PPS作为下一步,也将是很好的,使删除过程更冗长,例如将是很好的,你必须确认删除每个分支。但我认为这克服了问题...

uajslkp6

uajslkp63#

git branch -D $(git branch --list 'regex_here')
示例:
git branch -D $(git branch --list 'aputhen/*')
删除名称以aputhen/开头的所有分支。

xt0899hw

xt0899hw4#

添加我在PowerShell(Windows)中使用的脚本
Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }

j7dteeu8

j7dteeu85#

派对迟到了但另一种方法是

git branch -d `git branch | grep substring`

对于当前问题

git branch -d `git branch | grep origin`

这将删除名称中包含原点的所有分支。

相关问题