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

标签 git github

我被要求向大约两个月前且不再被引用的提交添加一个标签。我找不到通过 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/

相关文章:

git - 无法连接到 Netbeans 12.4 中的 github 存储库

linux - 如何用 git 组织单树?

Gitblame 失败并显示消息:fatal: internal error in blame::find_origin (D)

python - 将 pip 与 git repo 一起使用是否安全?

github - 如何删除 "generated from"标签?

git - 是否有任何 git merge-strategies 用于忽略提交或分支 merge 到目标分支的子模块更新?

git - 如何使用命令行修改git配置文件中的fetch参数?

git - 使用 git-revert 撤消推送 merge 的提交哈希?

Github for Windows 不添加新文件

github - travis ci构建错误