Git 我能看到遥控器的重写吗?

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

注意,我并没有要求重新测试远程跟踪分支(比如 source/master) ,我要求的是 reflog所说的 在另一台机器上

37797 次浏览

答案基本上是“否”(除了在那台机器上) ,因为 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

(在这个例子中,消息前面的内容不是空格,而是一个制表符; 出于 SO 的目的,我对它进行了展开)。从概念上讲,移动分支提示的所有其他内容都会调用 git update-ref来完成这项工作(有些是 shell 脚本,字面上就是这么做的,其他的只是调用 C 代码来完成所有的文件更新) ... ... 而 .git/logs中的所有内容都构成了重新分配。

如果在底层 git://和/或 ssh://协议中有一些东西可以让您获得重新测试,那么就可以做到这一点,但据我所知没有。

万一远程机器是一个 github 存储库,

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

  2. 识别不再存在于任何分支中的 孤儿的 SHA 提交-id

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

    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添加到本地存储库中。
    从那里你可以挑选或者合并提交到你的工作中

查看 这篇文章的实际示例。

在 GitHub 上,如果你错误地在 master 上使用了 git push --force来获取合并后的更改,同时合并后的分支被删除了(是的,我碰到过这种情况) ,你可以查找合并后的 pull 请求,然后转到 承诺部分,例如:

enter image description here

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

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

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