是什么阻止我在管道中使用$ _?

时间:2019-05-29 20:50:57

标签: git powershell

命令git branch --list | select-string 2362给了我一些符合模式2362的分支的列表。我想删除服务器上的所有那些分支。

命令git branch --list | select-string 2362 | git push origin --delete $_给我错误fatal: --delete doesn't make sense without any refs,这与我从命令git push origin --delete得到的错误相同。好像$ _为空,好像没有找到匹配模式的分支。

我在做什么错了?

2 个答案:

答案 0 :(得分:3)

您要执行的操作有几个问题。 git命令不接受管道输入(据我所知),因为它不是PowerShell cmdlet。

另外,Select-String返回一个MatchInfo对象,所以$_不仅包含分支的名称,还包含具有各种属性的该对象。

尝试一下:

(git branch --list | select-string 2362).line | ForEach-Object {
    git push origin --delete $_
}

请注意,如果分支名称是当前分支,则可能会在其中一个分支名称中得到*字符。

答案 1 :(得分:0)

我想出了这个“单线”:

git branch --list | ? { $_ -like "*2362*" } | Select-Object -first 1 | % {
    git push origin --delete ($_ -replace "[:\*]",  " ").Trim()  
}

Select-Object仅用于删除一个分支,当然可以将其删除。前导星和:被替换。修剪空间。

希望有帮助