簡體   English   中英

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

[英]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() }

腳步:

  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.

作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM