77

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

reflog请注意,我不是要远程跟踪分支(例如 origin/master)的reflog ,我要的是另一台机器上的内容。

4

3 回答 3

59

如果远程机器是 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

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

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

查看本文以获取实际示例。

于 2016-02-08T15:56:20.903 回答
48

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

$ 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构成了 reflog。

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

于 2012-04-11T01:17:04.187 回答
6

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

在此处输入图像描述

然后您继续最后一次提交并单击<>按钮(标题为“在历史记录中的此时浏览存储库”)。

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

  • 创建一个新分支,然后打开一个新的拉取请求(如果更改来自另一个存储库,建议使用)。
  • 打开一个新的拉取请求(建议在您的存储库内提交)。
于 2017-05-03T19:42:54.180 回答