如何在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
)一起管道化将无法正常工作,因为第一个命令的输出未按我的预期进行管道化。
答案 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() }
步骤:
列出合并的分支:git branch --merged
feature/branch1
feature/branch2
* master
过滤掉那些以 * 开头的(当前分支):Select-String -Pattern '^[^\*].*'
feature/branch1
feature/branch2
删除分支ForEach-Object { git branch -d $_.ToString().Trim() }
请注意,在 #3 中,我从输出中删除了一些空格:$_.ToString().Trim()
。
否则我们会得到如下错误:
error: branch ' feature/yourbranch' not found.