刪除 Git 中的所有本地分支

Ankit Raj Goyal 2023年1月30日
  1. 刪除 Git 中所有本地分支的詳細指令碼,除了 master
  2. 使用 Git 中的 -d 選項修改指令碼以僅刪除合併的分支
  3. 使用更簡單的指令碼刪除 Git 中的所有本地分支
  4. 修改指令碼以刪除名稱類似於 master 的本地分支,例如 Git 中的 master-prod
  5. 刪除 Git 中所有本地分支的簡短指令碼
  6. Git 中刪除所有本地分支的單行硬刪除命令
刪除 Git 中的所有本地分支

舊的本地分支使你的本地倉庫變得混亂,但沒有提供進一步的價值。你可以在本教程的幫助下一次性刪除所有本地分支。

我們使用諸如 grepxargsfor-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 分支之外的所有本地分支,包括未合併的分支。

讓我們分解這個指令碼,看看它是如何工作的。

  1. for-each-ref 遍歷 repo 中的所有引用。format 字串 '%refname:short' 從可迭代物件中提取一個簡短的 ref 名稱,並且 refs/heads 指向它們的 heads

    我們使用管道|for-each-ref 的輸出傳遞給 grep 命令運算子。

  2. grep 命令搜尋傳遞給它的參考頭以匹配表示式字串 master\|main\|develop。這涵蓋了你的 master 分支的不同名稱 - 你可能已將它們命名為 maindevelop

  3. grep 命令中的 -v 選項用於反向選擇。因此,它只會選擇那些不匹配表示式 master\|main\|develop 的分支 - 本質上,它會選擇除 master 之外的所有本地分支。

  4. 最後,xargs 命令獲取所有這些選定的分支並將它們作為引數傳遞給命令 git branch -Dgit 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-prodmaster-draft 之類的名稱。

我們可以將指令碼中的正規表示式從 "master\|main\|develop" 修改為 "master$\|main$\|develop$" 來實現此功能。

git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D

分支的名稱類似於 master prod

刪除類似名稱的分支 master prod

刪除 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)

此命令刪除除你所在的分支之外的所有分支。

單行硬刪除

相關文章 - Git Branch