先介绍一些背景知识,以便更清楚我在下面的意思:该fetch
命令分为两部分,一部分在您的端(您运行git fetch
),另一部分在远程(远程通过http://
, git://
,ssh://
或其他协议获取传入请求并启动东西,通常是内部git upload-pack
程序)。在遥控器上运行的上传包步骤提供了一系列形式为“我有一个对象”(通常是提交或带注释的标签)“ID id类型为name的类型”。
您可以通过运行git ls-remote
而不是git fetch
. 这仍然运行upload-pack
,但不是检索提供的内容,它只是显示(列出)优惠。
无论您在优惠清单中看到什么,都是您可以得到的。如果它没有出现在这里,你就不能得到它——或者至少不能通过git fetch
. 如果您知道其他一些方法,包括git archive
,可能允许您通过其原始 SHA-1 访问提交。
使其可获取
根据您的描述,听起来远程打开了 reflogs(是一个常规的非裸存储库)。提交E
曾经在某个分支(和 at HEAD
)上,但已被重置,因此只能通过两个 reflogHEAD
和分支访问它。
通常1 个 upload-pack
报价HEAD
加上refs
. Reflogs不在,refs
所以upload-pack
不提供。这意味着如果没有当前 ref 指向您的提交E
,它将不会被提供。要提供它,请登录到远程并创建一个指向 commit 的 ref E
,然后它会提供。
1这有点可配置;见git-namespaces
和中的三个hideRefs
配置项git-config
。