无法从github获取提交

时间:2017-03-29 12:22:16

标签: git github

以下命令无法检出this commit

$ git clone git@github.com:DefinitelyTyped/DefinitelyTyped.git
$ cd DefinitelyTyped
$ git checkout e90424c424ef9087d0589234e9e9cd0140bab0d7
fatal: reference is not a tree: e90424c424ef9087d0589234e9e9cd0140bab0d7

尝试按照以下advice given here结果进行操作:

$ git fetch origin e90424c424ef9087d0589234e9e9cd0140bab0d7
$ echo $?
1

这次失败是GitHub / GitHub上的大型回购特有的吗?我的git版本是2.10.1。

** 修改 **

$ git fetch origin e90424c424ef9087d0589234e9e9cd0140bab0d7:refs/remotes/origin‌​/foo-commit
$ echo $?
1
$ git cat-file -p e90424c424ef9087d0589234e9e9cd0140bab0d7
fatal: Not a valid object name e90424c424ef9087d0589234e9e9cd0140bab0d7
$ git branch -a --contains e90424c424ef9087d0589234e9e9cd0140bab0d7 
error: no such commit e90424c424ef9087d0589234e9e9cd0140bab0d7
$ git reset e90424c424ef9087d0589234e9e9cd0140bab0d7
fatal: Could not parse object 'e90424c424ef9087d0589234e9e9cd0140bab0d7'.

3 个答案:

答案 0 :(得分:2)

如果存储库已重新定位,则可能会发生您所看到的行为。您可以通过将提交推送到远程存储库,然后使用git commit --amend更新它并(强制)推送更新的存储库来自行复制。

旧的提交ID将继续存在于远程存储库中,直到运行某种垃圾收集,但由于它无法从任何现有引用中访问,因此它不会包含在git clone操作中。

答案 1 :(得分:2)

我怀疑无法从任何引用(分支或标记)访问提交,因此服务器不会将其包含在它发送给您的包文件中。

在我的测试中,只有提交已经在您的本地仓库中才能获取SHA1的特定提交(据我所知,这不太有用;它会更新public function getReviewsAction() { $serializer = $this->get('jms_serializer'); $em = $this->getDoctrine()->getManager(); $reviews = $em->getRepository('BookMainBundle:Review')->findAll(); $serializer->serialize($reviews, 'json', SerializationContext::create()->setGroups(array('Default', 'books'))); return $this->handleView($this->view($reviews)); } 我猜)...我甚至不知道它会在那种情况下起作用。

如果没有直接访问远程仓库,我不知道要恢复的程序。 (我不计算单独手动获取每个对象并在本地重建提交 - 以及任何缺失的历史记录的想法;即使它可以在理论上完成,也是完全不切实际的。)

一项小小的研究建议尝试这个命令:

FETCH_HEAD

我无法使用任何协议对其进行测试,但使用https,它无法使用该协议;但你可能会试一试。

答案 2 :(得分:0)

您可以检查e90424c424ef9087d0589234e9e9cd0140bab0d7 commit是否是当前分支的一部分。

git branch -a --contains e90424c424ef9087d0589234e9e9cd0140bab0d7 

通过这个,您可以看到包含此​​哈希提交的所有分支的列表。

此外,“checkout”选项适用于不使用散列提交的分支名称。使用带有checkout的哈希提交会导致“分离头状态”或“致命:引用不是树”。

如果要导航到当前分支中的特定提交,请使用带有软/硬选项的git reset。

git reset e90424c424ef9087d0589234e9e9cd0140bab0d7
git reset --hard e90424c424ef9087d0589234e9e9cd0140bab0d7

这会将您的HEAD指针更新为特定提交。