簡體   English   中英

Git BASH 刪除所有匹配模式的本地分支

[英]Git BASH delete all local branches matching a pattern

我試圖創建一個名為test/miwarren/memberLead ,但有孤立的本地分支(即合並然后在遠程刪除的分支),這阻止了:

$ git checkout -b test/miwarren/memberLead
fatal: cannot lock ref 'refs/heads/test/miwarren/memberLead': 'refs/heads/test/miwarren/memberLead/dob' exists; cannot create 'refs/heads/test/miwarren/memberLead'

我為當時正在處理的每個成員主要測試子套件創建了分支。

如何找到並刪除它們,以便我可以創建我的分支?

將完成工作的代碼行

假設您沒有其他與該模式匹配的分支,您需要在本地或遠程,您可以說:

git for-each-ref --format='%(refname:lstrip=2)' 'refs/heads/test/miwarren/memberLead/*' | xargs git branch -d

對於閱讀本文以將其應用於您的情況的任何人,請確保將test/miwarren/memberLead替換為您的分支名稱,您在嘗試創建時會遇到問題! 如果您嘗試創建的分支是給您提供問題的孤立分支的子字符串,那么這項工作就行了。

解釋

我們得到匹配模式'refs/heads/[your_branch_name]'git for-each-ref的 refs 列表,並將其映射到左側的分支名稱,然后將其通過管道傳輸到git branch -d在右手側。

它的左側

git for-each-ref 'refs/heads/[your_branch_name] ,開箱即用,返回與指定模式匹配的所有引用。 --format='%(refname:lstrip=2)'標志告訴該命令“通過--format='%(refname:lstrip=2)'前兩個單詞來格式化輸出”。 驚喜,驚喜,輸出等於分支名稱。

它的右手邊

沒有太多事情發生。 這是xargs的官方描述 git branch -d [your_branch_name]刪除分支[your_branch_name]

使用這個命令

git branch | grep [PATTERN] | xargs git branch -D

這是通過管道連接在一起的三個命令。 以下是它們的工作原理:

  1. git branch打印一個git branch列表。 它在當前分支之前帶有一個星號。
  2. grep [PATTERN]搜索列表並返回與模式匹配的那些行。
  3. xargs為我們提供了從 grep 返回的列表,然后我們將它們傳遞給git branch -D ,它刪除了分支。

參考

https://www.seancdavis.com/blog/git-delete-multiple-local-branches/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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