444 字
2 分鐘
Git fetch/pull 爆錯?大小寫分支衝突完整解法
結論
- 用指令找出大小寫衝突 → 保留一個 → 刪除多餘分支,就能解掉 Git fetch/pull 卡死問題
適合用在哪裡
- Windows / Mac 開發者遇到 Git pull 失敗
- 團隊有 Linux + Windows 混用
- 分支命名沒有統一規範
- CI/CD 突然抓不到分支
流程步驟
1. 找出大小寫衝突分支
- 用
git ls-remote抓遠端 branch,轉小寫後分組比對 - 核心是找「名稱不同但小寫後相同」的分支
git ls-remote --heads origin |ForEach-Object { ($_ -split "`t")[1] } |Group-Object { $_.ToLower() } |Where-Object { $_.Count -gt 1 } |Select-Object -ExpandProperty Group👉 這步是關鍵,沒找出衝突就無法處理
2. 決定保留分支
- 通常統一為小寫(如
feature/login) - 或依團隊規範決定 👉 Git 在 Windows 上不分大小寫,所以只能留一個
3. 刪除多餘分支
- 刪除遠端衝突分支
git push origin --delete Feature/Login- 刪除後記得同步本地
git fetch --prune👉 prune 很重要,不然本地還會殘留舊資料
補充
- Windows / Mac 預設是不分大小寫檔案系統,Linux 是分大小寫 → 衝突來源
- 不建議用
reftable解法,工具支援還不穩 - CI/CD 若綁錯分支,刪除前要先確認 pipeline
指令 / 範例整理
Click to expand
# 找出大小寫衝突git ls-remote --heads origin |ForEach-Object { ($_ -split "`t")[1] } |Group-Object { $_.ToLower() } |Where-Object { $_.Count -gt 1 } |Select-Object -ExpandProperty Group# 自訂 functionfunction Find-GitCaseConflict { git ls-remote --heads origin | ForEach-Object { ($_ -split "`t")[1] } | Group-Object { $_.ToLower() } | Where-Object { $_.Count -gt 1 } | Select-Object -ExpandProperty Group}# 刪除遠端分支git push origin --delete Feature/Login
# 清理本地git fetch --prune收尾
- Git 分支大小寫不統一,就是定時炸彈
- 建議一開始就規範命名(全小寫),後面會少很多坑
Git fetch/pull 爆錯?大小寫分支衝突完整解法
https://joyceowo.github.io/posts/334a78ea09fa80a889fbf092a1576c5e/