GitHub 发现在 git cli 上找不到的提交

分组

我被要求在大约两个月前并且不再被引用的提交中添加一个标签。我找不到对通过 cli 提供给我的哈希的引用。我找不到让我的本地工作区引入未引用提交以找到“丢失”提交的方法。

我去了我们的 GitHub 实例并搜索了哈希。GH 在一些旧的拉取请求中找到了对它的引用。我通过 pull request 查看当时 repo 的状态,然后从那里创建了一个分支。然后我去了 cli,检查了那个新分支并标记它并将它推上来。

我想我应该能够通过 cli 完成所有这些。当我不需要时,我宁愿不必依赖 GH。感谢您的帮助。

bk2204

GitHub 通常不会对存储库中找到的对象进行垃圾回收(尽管不能保证这种行为)。因此,如果你有一个没有在任何地方被引用的对象,它可能仍然存在于 GitHub 上,但不会被克隆到你的系统,因为 Git 只会获取那些被引用的对象。

这是这种情况,因为 Git 无法知道如何获取它没有引用的对象,因此除非您特别请求它们,否则它不会获取它们。

如果您要查找的对象是拉取请求的一部分,您可以尝试获取拉取请求引用。它们被称为refs/pull/NUMBER/head,其中NUMBER是拉取请求编号。因此,要将拉取请求 42 提取到temp分支中,您可以运行以下命令:

git fetch origin refs/pull/42/head:temp

但是,如果您想要的提交确实是拉取请求的旧版本,那么它可能完全没有被引用。如果是这样,您可以使用协议版本 2 和最新版本的 Git 来获取该提交。请注意,只有协议版本 2 允许您获取任意提交;否则会受到限制。所以如果你想 fetch af6b65d45ef179ed52087e80cb089f6b2349f4ecinto temp,你可以写:

git -c protocol.version=2 fetch origin af6b65d45ef179ed52087e80cb089f6b2349f4ec:temp

并非所有服务器都支持协议版本 2,但 GitHub 支持。

提交后,您可以像往常一样标记和推送。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章