專案開發久了,不管是在 remote 還是 local 都有很多 branch,有些是已經 merge 的,有些是不再使用的,但當我們在掃 branch 的時候,時常充斥著這些 branch,我們能不能做一些設定調整或者使用指令來刪除這些 branch 呢?
預計要清掉的 branch 類型
1. 已經 merge 到 main/develop 的 branch
# 刪除所有已經 merge 到 main 的 branch 並排除 main 和 develop 及當前 branch
git branch --merged main \
| grep -vE '^\*| main$| develop$' \
| xargs git branch -d
💡 同時,可以在 Github 上設定 Automatically delete head branches,這樣在 PR merge 後,Github 會自動幫你刪除 branch。
After pull requests are merged, you can have head branches deleted automatically.

- 如何設定 Automatically delete head branches:
- 在 repo 頁面右上角點選 Settings。
- 在左側選單點選 General。
- 往下捲動到 Pull Requests 區塊。
- 勾選 Automatically delete head branches 選項。
2. 刪除在 local 但對不到 remote 的 branch
# 刪除所有在 local 但 remote 上已經不存在的 branch
git branch -vv \
| grep '\[origin/.*: gone\]' \
| awk '{print $1}' \
| xargs git branch -d
3. 清理以上 1、2 類刪除後在 local 殘留的過時 remote-tracking branch
# 列出預計要刪除的 remote-tracking branch
git remote prune origin --dry-run
# 刪除 remote-tracking branch
git remote prune origin