2026年9月23日 星期三

自動清理 github 上已經刪除的分支

自動清理 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]'





沒有留言:

張貼留言