刪除 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)
此命令刪除除你所在的分支之外的所有分支。
