444 字
2 分鐘
瀏覽次數
Git fetch/pull 爆錯?大小寫分支衝突完整解法
2026-03-31
2026-04-14

結論#

  • 用指令找出大小寫衝突 → 保留一個 → 刪除多餘分支,就能解掉 Git fetch/pull 卡死問題

適合用在哪裡#

  • Windows / Mac 開發者遇到 Git pull 失敗
  • 團隊有 Linux + Windows 混用
  • 分支命名沒有統一規範
  • CI/CD 突然抓不到分支

流程步驟#

1. 找出大小寫衝突分支#

  • git ls-remote 抓遠端 branch,轉小寫後分組比對
  • 核心是找「名稱不同但小寫後相同」的分支
Terminal window
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. 刪除多餘分支#

  • 刪除遠端衝突分支
Terminal window
git push origin --delete Feature/Login
  • 刪除後記得同步本地
Terminal window
git fetch --prune

👉 prune 很重要,不然本地還會殘留舊資料

補充#

  • Windows / Mac 預設是不分大小寫檔案系統,Linux 是分大小寫 → 衝突來源
  • 不建議用 reftable 解法,工具支援還不穩
  • CI/CD 若綁錯分支,刪除前要先確認 pipeline

指令 / 範例整理#

Click to expand
Terminal window
# 找出大小寫衝突
git ls-remote --heads origin |
ForEach-Object { ($_ -split "`t")[1] } |
Group-Object { $_.ToLower() } |
Where-Object { $_.Count -gt 1 } |
Select-Object -ExpandProperty Group
Terminal window
# 自訂 function
function Find-GitCaseConflict {
git ls-remote --heads origin |
ForEach-Object { ($_ -split "`t")[1] } |
Group-Object { $_.ToLower() } |
Where-Object { $_.Count -gt 1 } |
Select-Object -ExpandProperty Group
}
Terminal window
# 刪除遠端分支
git push origin --delete Feature/Login
# 清理本地
git fetch --prune

收尾#

  • Git 分支大小寫不統一,就是定時炸彈
  • 建議一開始就規範命名(全小寫),後面會少很多坑

Git fetch/pull 爆錯?大小寫分支衝突完整解法
https://joyceowo.github.io/posts/334a78ea09fa80a889fbf092a1576c5e/
作者
JoyceOwO
發佈於
2026-03-31
許可協議
CC BY-NC-SA 4.0