执行git checkout <commitid>报错:fatal: reference is not a tree: <commitid>
fatal: reference is not a tree: <commitid> 错误 针对你遇到的情况——GitHub上能正常查看目标提交的页面,但本地执行 git checkout <commitid> 时触发错误,且已完成远程仓库添加、常规分支fetch操作,可按以下步骤排查解决:
核对提交ID的完整性
GitHub页面URL里的<commitid>通常是短哈希(7位左右),如果本地仓库未同步到该短哈希对应的完整提交,或短哈希存在冲突,就会报错。直接复制页面上的完整40位commit ID,重新执行git checkout <完整commitid>尝试。强制拉取所有远程引用
执行git fetch <远程仓库名> --all(若远程仓库名为origin则用git fetch origin --all),强制拉取远程仓库的所有内容,包括不在常规分支上的提交、标签或孤立分支。部分提交可能仅存在于这些特殊引用中,常规git fetch无法获取。验证远程仓库是否包含该提交
用git ls-remote <远程仓库名> <commitid>检查远程仓库是否存在目标提交。如果返回结果为空,说明该提交可能已被强制推送覆盖/删除,或是你添加的远程仓库是fork版本,原仓库的提交未同步到当前远程(这种情况需添加原仓库为远程后重新fetch)。先切换到提交所在远程分支
若知道提交所属的远程分支,先执行git checkout <远程仓库名>/<分支名>切换到该远程分支,再用git log确认目标提交是否存在,之后再执行git checkout <commitid>。检查本地仓库完整性
若以上方法均无效,执行git fsck检查本地仓库是否存在对象损坏问题。若仓库损坏严重,建议重新克隆远程仓库。
内容的提问来源于stack exchange,提问作者Aditya Mahajan

