![](/img/trans.png)
[英]Git : How to delete all local branches (merged or not), except master and develop
[英]How to delete all merged local branches in Git with PowerShell
如何遍歷我的分支,過濾掉合並的分支並使用 Git for Powershell 中的 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
)不起作用,因為 Z78E6221F6393D146681CED 的第一個命令不是來自預期的管道.
經過一番玩耍並進一步研究 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 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.
作為Liero
答案的補充,您可以使用以下正則表達式從將要刪除的分支列表中排除特定分支:
'^(?!.*(master|development)).*$'
因此,完整的命令變為:
git branch --merged | Select-String -Pattern '^(?!.*(master|development)).*$' | ForEach-Object { git branch -d $_.ToString().Trim() }
PS :如果您的分支名稱包含非 ascii 字符,您可能需要在運行上述命令之前切換 Powershell 的輸出編碼,例如:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
你也可以使用這個命令:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
安德烈·費多托夫的所有學分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.