git我可以查看远程的reflog吗?

Ale*_*ird 53 git

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

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

tor*_*rek 34

答案基本上是"不"(除了在那台机器上),因为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
Run Code Online (Sandbox Code Playgroud)

(在这种情况下foo,消息之前的东西不是空格而是标签;我为了SO目的而扩展它).从概念上讲,移动分支提示的其他所有内容都会调用git update-ref它(有些是shell脚本,字面意思是这样做,其他只是调用执行所有文件更新的C代码)......并且所有内容.git/logs构成了reflog.

如果底层的git://和/或ssh://协议中有东西可以让你获得reflog,那就可以了,但据我所知,没有.


Bła*_*app 32

关于远程机器是github存储库的可能性,

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

  2. 标识任何分支中不再存在的孤立commit-idSHA.

  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将新创建的分支放入本地存储库.
    从那里你可以挑选或合并提交回你的工作.

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

  • 非常感谢!对于那些不太倾向于使用命令行的人,你也可以通过打开https://github.com/ <user>/<repo>/commits/<orphan-commit-id>来绕过第3步,并从中创建一个新的分支.它直接在"树:"下拉列表中.然后只需正常获取它. (6认同)
  • 这个答案看起来解决的问题与问题所提出的问题不同。看起来它解决了如何恢复无法从任何分支或标签访问的提交,而问题则询问如何查看引用日志 - 分支或标签引用的历史记录。 (4认同)
  • 需要明确的是,对于未来的读者,您需要将 `-u &lt;github 用户名&gt;:&lt;github 个人访问令牌&gt;` 添加到 3 中的命令中。 (4认同)
  • 对我来说,最简单的跟踪*孤岛提交ID * SHA的方法是查看CircleCI的最新构建(或[在此处插入CI服务])。 (3认同)
  • 如果你收到一个 `"message": "Not Found"` 错误,这意味着你需要进行身份验证,例如通过传递一个 access_token 查询字符串。 (2认同)
  • [此处](https://developer.github.com/v3/) 是有关如何进行身份验证的说明。 (2认同)

Jea*_*ean 9

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

在此输入图像描述

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

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

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