刪除 Git 中的所有本地分支
-
刪除 Git 中所有本地分支的詳細指令碼,除了
master
-
使用 Git 中的
-d
選項修改指令碼以僅刪除合併的分支 - 使用更簡單的指令碼刪除 Git 中的所有本地分支
-
修改指令碼以刪除名稱類似於
master
的本地分支,例如 Git 中的master-prod
- 刪除 Git 中所有本地分支的簡短指令碼
- Git 中刪除所有本地分支的單行硬刪除命令
舊的本地分支使你的本地倉庫變得混亂,但沒有提供進一步的價值。你可以在本教程的幫助下一次性刪除所有本地分支。
我們使用諸如 grep
、xargs
和 for-each-ref
之類的命令來為此任務編寫指令碼。我們為不同的用例展示了各種選項。
我們還提供了一個在教程結束時刪除所有本地分支的單行快速 hack。
刪除 Git 中所有本地分支的詳細指令碼,除了 master
我們將以下指令碼編寫到 Git 刪除除 master
分支之外的所有本地分支。
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -D
此指令碼將刪除除 master
分支之外的所有本地分支,包括未合併的分支。
讓我們分解這個指令碼,看看它是如何工作的。
-
for-each-ref
遍歷 repo 中的所有引用。format
字串'%refname:short'
從可迭代物件中提取一個簡短的 ref 名稱,並且refs/heads
指向它們的heads
。我們使用管道
|
將for-each-ref
的輸出傳遞給grep
命令運算子。 -
grep
命令搜尋傳遞給它的參考頭以匹配表示式字串master\|main\|develop
。這涵蓋了你的master
分支的不同名稱 - 你可能已將它們命名為main
或develop
。 -
grep
命令中的-v
選項用於反向選擇。因此,它只會選擇那些不匹配表示式master\|main\|develop
的分支 - 本質上,它會選擇除master
之外的所有本地分支。 -
最後,
xargs
命令獲取所有這些選定的分支並將它們作為引數傳遞給命令git branch -D
。git branch -D
是強制刪除所有作為引數傳遞的分支的命令。
使用 Git 中的 -d
選項修改指令碼以僅刪除合併的分支
我們可以修改上面的指令碼只刪除合併的分支。我們用 -d
選項替換最後的 -D
選項。
-d
是一個軟刪除選項,僅刪除合併的分支。
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -d
我們看到 first_branch
已合併,但 second_branch
未合併。
我們修改後的指令碼只刪除了合併的 first_branch
,但留下了未合併的 second_branch
。
使用更簡單的指令碼刪除 Git 中的所有本地分支
有些人可能會覺得上面的指令碼過於複雜和過分。我們可以使用更簡單的指令碼來完成相同的任務。
git branch | grep -v "master\|main\|develop" | xargs git branch -D
該指令碼用簡單的 git branch
命令替換了複雜的 for-each-ref
。
請注意,Git 不建議在指令碼中使用 git branch
。但有時我們可以偏離最佳實踐以獲得快速解決方案。
修改指令碼以刪除名稱類似於 master
的本地分支,例如 Git 中的 master-prod
有時,你的倉庫可能有名稱類似於 master
的分支。例如,你的某些分支可能具有諸如 master-prod
或 master-draft
之類的名稱。
我們可以將指令碼中的正規表示式從 "master\|main\|develop"
修改為 "master$\|main$\|develop$"
來實現此功能。
git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D
刪除 Git 中所有本地分支的簡短指令碼
我們可以將巧妙的正規表示式傳遞給 grep
以進一步縮短我們的指令碼。
git checkout master
git branch | grep -v "^*" |xargs git branch -D
表示式"^*"
表示從當前分支 (*
) 開始 (^
) 的所有分支。我們首先做了 git checkout master
,所以我們當前的分支是 master
。
因此 -v "^*"
過濾掉我們當前的分支 master
並刪除所有其他本地分支。
Git 中刪除所有本地分支的單行硬刪除命令
最後,如承諾的那樣,我們將向你展示一個單行硬刪除命令,用於刪除 Git 中的所有本地分支。
git branch -D $(git branch)
此命令刪除除你所在的分支之外的所有分支。