在使用 GitHub 或 GitLab 的現代開發工作流程中,一旦合併了相應的拉取請求 (PR),功能分支通常就會在遠端主機上刪除。
但是,當您在本機終端中執行 git branch -a 時,您會注意到 **指向那些已刪除的遠端分支(例如 remotes/origin/feature-xxx)的引用無限期地保留在您的分支清單中。 **
發生這種情況是因為預設情況下 Git 不會自動將遠端配置中的刪除同步到本機快取。
在本指南中,我們將解釋如何安全地清理這些過時的遠端追蹤分支並配置 Git 以自動保持工作空間整潔。
1. 原因:過時的遠端追蹤參考
當您執行標準 git fetch 或 git pull 指令時,Git 會取得新增至遠端儲存庫的新分支資料。
但是,**Git 不會自動減去(刪除)對已從遠端刪除的分支的參考。 **這些孤立的追蹤標記仍保留在您的本機電腦上,使選項卡補全和搜尋清單變得混亂。
清除這些陳舊的本地標記稱為修剪。
2. 使用 git fetch --prune 進行修剪
清除過時的遠端追蹤引用的最直接方法是在 fetch 命令中新增 --prune (或短 -p)標誌:
# Fetch updates and prune deleted tracking branches
git fetch --prune
# Or
git fetch -p
運行時,Git 輸出已刪除引用的摘要:
From github.com:user/repository
- [deleted] (none) -> origin/feature-login
- [deleted] (none) -> origin/feature-auth
再次執行 git branch -a 將確認過時的 remotes/origin/ 條目已清除。
3. 全域自動化剪枝(建議)
為了避免在每次獲取時手動輸入 --prune ,請將 Git 配置為在每次獲取或拉取時自動修剪追蹤引用:
# Enable pruning automatically on all git fetches globally
git config --global fetch.prune true
啟用後,任何 git fetch 或 git pull 的執行都會在背景執行修剪。
4.清理本地工作分支(git branch -d)
請務必注意,git fetch --prune 僅刪除對遠端 分支 (origin/xxx) 的參考。 **您自己的本機分支工作區 (xxx) 保持不變。 **
若要刪除已成功合併的本機工作分支,請使用:
# Delete a merged local branch safely
git branch -d feature-login
# Force delete an unmerged local branch
git branch -D feature-login
結論
孤立的追蹤條目可能會快速累積,從而使命令列環境變得混亂。
- **使用
git fetch -p修剪過時的引用。 ** - **透過全域設定
fetch.prune true來自動化操作。 ** - **使用
git branch -d手動刪除本機工作分支。 **
保持工作空間清潔,以維持更快、反應更靈敏的終端工作流程。

