如何使用PowerShell删除Git中的所有合并本地分支

s.h*_*ris 5 git powershell

如何在Powershell中使用Git for Windows来迭代我的分支,过滤掉合并的分支并删除它们?

我已经尝试过一些研究,但我发现的每个答案都围绕着使用bash特定命令,例如grep和xargs.Powershell没有相同的命令,因此这些命令对我不起作用.

但是,根据该研究,我发现git for-each-ref --format '%(refname:short)' refs/heads可以显示所有本地分支,同时git branch -d将删除任何合并分支.但是,将这两个命令连接在一起(git for-each-ref --format '%(refname:short)' refs/heads | git branch -d)不起作用,因为第一个命令的输出没有按照我的预期进行管道传输.

s.h*_*ris 8

在玩了一些关于Powershell命令的进一步研究之后,我找到了解决方案!

虽然Powershell没有xargs命令,但确实有类似的命令ForEach-Object.此命令允许我们处理输出的每一行git for-each-ref.对于这个特定的问题,以下行做了诀窍:

git for-each-ref --format '%(refname:short)' refs/heads | ForEach-Object {git branch $_ -d}

ForEach-Object命令后的花括号包含您希望运行的命令,而$_变量代表管道命令的每一行输出.

希望这有助于其他新手Powershell/Git用户!

  • 我添加了一个检查以将开发和母版也排除在删除之外...`git for-each-ref --format'%(refname:short)'refs / heads --merged | ForEach-Object {If(“ develop”,“ master”-不包含$ _){git branch $ _ -d}}` (3认同)
  • 真好!您可能想在管道之前添加--merged,以将其限制为合并的分支 (2认同)

Lie*_*ero 7

git branch --merged | Select-String -Pattern '^[^\*].*' | ForEach-Object { git branch -d $_.ToString().Trim() }

脚步:

  1. 列出合并的分支:git branch --merged

      feature/branch1
      feature/branch2
    * master
    
    Run Code Online (Sandbox Code Playgroud)
  2. 过滤掉以 * 开头的分支(当前分支):Select-String -Pattern '^[^\*].*'

      feature/branch1
      feature/branch2
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除分支ForEach-Object { git branch -d $_.ToString().Trim() }

请注意,在 #3 中,我从输出中删除了一些空格:$_.ToString().Trim()。否则我们会得到如下错误:

error: branch '  feature/yourbranch' not found.
Run Code Online (Sandbox Code Playgroud)