自動清理 github 上已經刪除的分支
讓每次 git fetch / git pull 自動清掉遠端已刪除的分支,保持本機的 origin/* 與遠端一致。
git config --global fetch.prune true
復原
git config --global --unset fetch.prune
為什麼需要
遠端刪除分支後,本機的 origin/xxx 並不會跟著消失。時間一久,git branch -r 就會堆滿早已合併刪除的殭屍分支。
開啟後等同每次 fetch 都自動加上 --prune,不用再手動執行 git remote prune origin。
好處
- 分支清單反映真實狀況:看到的遠端分支就是真的存在的分支
- 減少雜訊:Tab 補全、
git branch -a、GUI 工具都更乾淨 - 大型 repo 更有感:過期參照累積過多會拖慢部分指令
- 不用靠記憶:設定一次就好
安全嗎?
安全。它只清理 origin/* 這類 remote-tracking branch,不會刪除你的本地分支。
需要時也可以臨時關閉:
git fetch --no-prune
Git 沒把它設為預設,只是因為被刪的參照不留 reflog,屬保守考量。唯一的小風險是有人誤刪遠端分支時,你本機少了一份可救回的參照。
注意 fetch.pruneTags
相關設定 fetch.pruneTags 會連 tag 一起清理,可能刪掉不是來自該 remote 的本地 tag。fetch.prune 放心開,fetch.pruneTags 視需求再決定。
延伸:找出可清理的本地分支
確認不需要後,用 git branch -d <name> 刪除。-
git branch -vv | grep ': gone]'
沒有留言:
張貼留言