无法签出 git 提交

Impossible to checkout a git commit

我正在尝试检查我在 GitHub 上看到的特定提交:

https://github.com/mapbox/node-sqlite3/commit/b8907e79fc3fb52803b5a05c106948911dcd77ac

但是,本地结帐失败:

$ git checkout b8907e79fc3fb52803b5a05c106948911dcd77ac
fatal: reference is not a tree: b8907e79fc3fb52803b5a05c106948911dcd77ac

A git reset 因同样的错误而失败。

有什么想法吗?

那个提交 曾经 在那个存储库中一次。

它随后从存储库中删除,因此该存储库的新克隆不会获得该特定提交。 (删除有点棘手,但例如,这可能是因为拉取请求被修改——提交 因为拉取请求,然后拉取请求本身更新为新的-and-improved 提交。替换提交是最终使用的提交,原始提交会在几天后自行过期。)

它仍然存在于 GitHub 上,因为 GitHub 并不总是立即清除所有内容。然而,在这种情况下,他们已经很长时间没有清理干净了,而且还不清楚为什么它仍然可以通过 GitHub 网络界面访问。此提交也无法通过拉取请求访问(有 218 个拉取请求挂在提交上,但这不在其中)。我想知道来自 "issues" 页面的链接是否也可以在 GitHub.

上保持其他方式无法访问的提交。

通过其在 GitHub 上的父链接向后跟踪此提交,揭示了整个提交序列,这些提交似乎在某些时候已被新的和改进的版本所取代。

根据 GitHub 在其每个存储库中运行 git gc 的频率,该提交(如果已删除)可能仍在 GitHub 端。

然后一个技巧是对那个旧提交使用 GitHub Tags API to create a tag object

您可以执行 git fetch --tags,这足以启用该提交的本地签出。