【问题标题】:git can I view the reflog of a remote?git 我可以查看远程的 reflog 吗?
【发布时间】:2012-04-23 07:04:52
【问题描述】:

是否可以查看远程的 reflog?也就是说,我想知道git reflog在另一台远程机器上的输出是什么。

注意,我不是要远程跟踪分支(例如 origin/master)的 reflog,我要的是 reflog 在另一台机器上说什么

【问题讨论】:

  • 如果你可以访问远程系统的文件系统(通常是一个裸仓库),你总是可以选择在那里运行 git reflog。但是通常不可能有这样的访问权限。我习惯在 git 服务器上实现这一点(使用只读文件共享),只是为了可以在服务器端查看 reflog。

标签: git


【解决方案1】:

如果远程机器是 github 存储库,

  1. 首先使用 Github 的事件 API 来检索提交 SHA。
    curl https://api.github.com/repos/<user>/<repo>/events

  2. 确定在任何分支中不再存在的 孤立提交 ID 的 SHA

  3. 接下来,使用 Github 的 Refs API 创建一个指向孤立提交的新分支。

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

    将上述命令中的 <orphan-commit-id> 替换为步骤 2 中确定的 SHA。

  4. 最后git fetch 新创建的分支进入您的本地存储库。
    从那里你可以挑选或合并提交到你的工作中。

查看this article 以获取实际示例。

【讨论】:

  • 非常感谢!对于那些不太喜欢使用命令行的人,您也可以通过打开github.com/<user>/<repo>/commits/…> 并直接在“树:”下拉列表中创建一个新分支来绕过第 3 步。然后正常获取。
  • 如果您收到"message": "Not Found" 错误,这意味着您需要进行身份验证,例如通过传递 access_token 查询字符串。
  • 对我来说,追踪 孤儿提交 ID 的 SHA 的最简单方法是查看 CircleCI 上的最后一个构建(或 [在此处插入 CI 服务])。
  • Here 是有关如何进行身份验证的说明。
  • 这个答案看起来与问题所提出的问题不同。看起来它解决了如何从任何分支或标签恢复不再可访问的提交,而问题询问如何查看 reflog - 分支或标签所引用的历史记录。
【解决方案2】:

答案基本上是“否”(在那台机器上除外),因为 reflog 是本地重新分配某些 ref-name 的日志。本质上,每次运行 git update-ref -m msg &lt;name&gt; &lt;target&gt; 时都会记录更新...本地:.git/logs/&lt;name&gt; 附加一行:

$ git update-ref -m foo HEAD HEAD^
$ tail -1 .git/logs/HEAD
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600     foo

(消息之前的内容,在本例中为 foo,不是空格,而是一个制表符;我出于 SO 目的对其进行了扩展)。从概念上讲,移动分支提示的所有其他内容都会调用 git update-ref 来执行此操作(有些是 shell 脚本,实际上是这样做的,其他人只是调用执行所有文件更新的 C 代码)......以及 .git/logs 中的所有内容更新日志。

如果底层 git:// 和/或 ssh:// 协议中有一些东西可以让您访问 reflog,那会这样做,但据我所知没有。

【讨论】:

    【解决方案3】:

    在 GitHub 上,如果您之前在 master 上错误地git push --force 以获取合并的更改,同时合并的分支被删除(是的,它发生在我身上),您可以查找合并的拉取请求并转到 提交 部分,例如:

    然后您继续最后一次提交并单击&lt;&gt; 按钮(标题为“浏览历史上此时的存储库”)。

    这会将您带到历史的“已删除”点。从这里您可以:

    • 创建一个新分支,然后打开一个新的拉取请求(如果更改来自另一个存储库,则建议这样做)。
    • 打开一个新的拉取请求(建议在您的存储库中提交)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2011-05-06
    • 2016-08-14
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多