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

时间:2018-07-04 10:27:22

标签: 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)一起管道化将无法正常工作,因为第一个命令的输出未按我的预期进行管道化。

2 个答案:

答案 0 :(得分:6)

经过一番研究和对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用户!

答案 1 :(得分:1)

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

步骤:

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

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

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

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

error: branch '  feature/yourbranch' not found.