我被要求向大约两个月前且不再被引用的提交添加一个标签。我找不到通过 cli 提供给我的哈希值的引用。我找不到一种方法让我的本地工作区提取未引用的提交来查找“丢失的”提交。
我访问了 GitHub 实例并搜索了哈希值。 GH 在一些旧的 pull 请求中发现了对它的引用。我查看了 pull 请求以查看当时存储库的状态,然后从那里创建了一个分支。然后我进入 cli,检查该新分支并标记它并将其推送。
我认为我应该能够通过 cli 完成所有这些工作。当我不需要的时候,我宁愿不依赖 GH。感谢您的帮助。
最佳答案
GitHub 通常不会对存储库中找到的对象进行垃圾收集(尽管不能保证这种行为)。因此,如果您有一个没有在任何地方引用的对象,它可能仍然存在于 GitHub 上,但不会克隆到您的系统,因为 Git 只会获取那些被引用的对象。
出现这种情况是因为 Git 无法知道要获取它没有引用的对象,因此除非您特别请求它们,否则它不会获取它们。
如果您要查找的对象是 pull 请求的一部分,您可以尝试获取 pull 请求引用。它们称为 refs/pull/NUMBER/head,其中 NUMBER 是 pull 请求编号。因此,要将 pull 请求 42 提取到 temp
分支中,您可以运行以下命令:
git fetch origin refs/pull/42/head:temp
但是,如果您想要的提交实际上是 pull 请求的旧版本,那么它可能完全未被引用。如果是这样,您可以使用协议(protocol)版本 2 和最新版本的 Git 来获取该提交。请注意,只有协议(protocol)版本 2 允许您获取任意提交;否则会受到限制。因此,如果您想将 af6b65d45ef179ed52087e80cb089f6b2349f4ec
提取到 temp
中,您可以编写:
git -c protocol.version=2 fetch origin af6b65d45ef179ed52087e80cb089f6b2349f4ec:temp
并非所有服务器都支持协议(protocol)版本 2,但 GitHub 支持。
提交后,您可以像平常一样标记和推送。
关于GitHub 找到在 git cli 上找不到的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61552957/