科技 · 實用指南
Git 顯示「pathspec did not match」?先判斷參數是什麼
先證明失敗參數應是本機分支、遠端分支、提交或已追蹤路徑,再 fetch、建立、切換或還原。

Git 的「pathspec did not match any file(s) known to git」不會說明你想輸入的是分支、提交還是路徑。先保存原命令與儲存庫狀態,因為安全修復取決於參數應存在的命名空間。
本指南先做唯讀 ref、物件、索引與樹檢查,再考慮抓取、建分支、還原、重設或清理。儲存庫根目錄或目標不明時應停止。
凍結儲存庫與原始命令
複製完整命令、錯誤、工作目錄、拼字與 shell 引號。更改 ref 或檔案前記錄 git rev-parse --show-toplevel、git status --short --branch、git remote -v 與 git --version。rev-parse 失敗時先確認目錄屬於目標儲存庫。
不要先執行 git reset --hard、git clean、寬泛 fetch 或隨手建立分支。這會抹掉證據,或用新名稱掩蓋真正意圖。
先說明參數本應代表什麼
為失敗參數標示一種預期類型:已有本機分支、遠端分支、新分支、提交或標籤、已追蹤路徑。checkout 有多種模式,同一詞受 refs、索引、樹與 -- 影響。
把標示當成假設而非修復。像分支的詞不證明分支存在,像檔案的詞不證明已追蹤,短雜湊也不證明本機有物件。
證明本機與遠端分支狀態
本機分支用 git show-ref --verify refs/heads/NAME,並看 git branch --all --no-color。遠端分支可用 git ls-remote --heads REMOTE NAME 唯讀查詢,記錄僅本機、僅遠端、兩者或皆無。
僅遠端存在時,精確抓取該 ref 再建立追蹤分支。確需新分支時,證明 START 後才用 git switch -c NAME START;不要以建分支替代診斷。
簽出前先證明提交或標籤
用 git rev-parse --verify --end-of-options ARG^{commit} 檢查參數能否解析為提交。--end-of-options 防止前導短線成為選項。失敗只代表本機不能解析,不證明遠端來源。
抓取前證明來源是遠端 ref、標籤、PR ref、子模組記錄或其他儲存庫。只抓取最小且已驗證的 ref;寬泛 fetch 不是有效性證據。
在索引或指定樹中證明路徑
用 git ls-files --error-unmatch -- PATH 唯讀檢查索引。查指定樹則用 git ls-tree -r --name-only TREE -- PATH。核對大小寫、分隔符、相對拼字與 shell 展開。
處理路徑時在前面放 --:git restore --source=TREE -- PATH;舊流程可用 git checkout TREE -- PATH。分隔符強制路徑解釋。
把證據映射為一個最小動作
已有本機分支就切換;新分支只從已證明起點建立;僅遠端分支先精確抓取再追蹤;提交只在明確需要時分離簽出;已追蹤路徑用 -- 還原。
若所有命名空間都沒有參數,停止並回到名稱來源。缺失就是結論;子模組、稀疏簽出與淺層複製需要獨立證據。
驗證結果並保留復原證據
用修正後的明確命令重做原意圖,再檢查 git status --short --branch、git rev-parse --verify HEAD 及必要的 branch 或 path 證據。確認 HEAD、上游、索引與工作樹。
記錄建立的 ref、抓取的精確 ref、還原路徑、舊 HEAD 與命令。證明意外分支沒有獨有工作後才能刪除,並只從已驗證的樹還原。
