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

Nir*_*osh 24 git github

如何从字母'o'开始删除git中的分支?

假设,我有一个如下所示的分支列表:

origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma
Run Code Online (Sandbox Code Playgroud)

不想删除分支origin_alpha,origin_betaorigin_gamma.

hek*_*mgl 46

更新:-r选项xargs是GNU插件.除非你使用xargsGNU findutils,否则它可能无效.您可以省略它,但如果输入到xargs的输入为空,则会导致错误.


您可以使用git branch --list <pattern>和输出它的输出xargs git branch -d:

git branch --list 'o*' | xargs -r git branch -d
Run Code Online (Sandbox Code Playgroud)

顺便说一句,上面的代码有一个小问题.如果您当前已检出其中一个以o输出开头的分支git branch --list 'o*'将如下所示:

* origin_master
origin_test
o_what_a_branch
Run Code Online (Sandbox Code Playgroud)

请注意*当前分支名称前面的星号.

虽然无论如何都无法删除当前分支,但它会导致xargs也传递*给它git branch delete.

正如我所说,它只是一个装饰错误,但如果你想避免它使用:

git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d
Run Code Online (Sandbox Code Playgroud)

  • 刚尝试使用Mac:xargs不接受`-r`(非法选项 - r`),但它没有达到预期目的. (6认同)
  • 如果你在那个分支上,@ cmbuckley`git branch -d <branch>`也行不通.;)这就是为什么我忽略了这一点. (2认同)
  • 仅供参考,单引号现在在 Windows 上为我杀死它 `gitbranch --list 'hotfix'` 没有显示任何内容,但 `gitbranch --list "hotfix"` 可以解决问题 (2认同)

Aus*_*p.b 18

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


lzz*_*uca 13

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

git branch -d $(git branch | grep yourSearchPattern)
Run Code Online (Sandbox Code Playgroud)

对我来说看起来更直观,因为grep是我每天使用的东西.

你也可以为它做一个别名(或者也可以是这里建议的任何解决方案),例如在这里查看如何将参数传递给别名:http: //www.cyberciti.biz/faq/linux-unix-pass-argument-到别名命令/

PS在您的具体情况下,yourSearchPattern可能来自:

git branch -d $(git branch | grep origin)
Run Code Online (Sandbox Code Playgroud)

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


Pra*_*pta 7

聚会迟到了,但另一种方法是

git branch -d `git branch | grep substring`
Run Code Online (Sandbox Code Playgroud)

对于当前的问题

git branch -d `git branch | grep origin`
Run Code Online (Sandbox Code Playgroud)

这将删除名称包含 origin 的所有分支。


小智 6

添加我在 PowerShell (Windows) 中使用的脚本

Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }