git checkout远程引用

Her*_*III 8 git github

我在github上有一个pull请求列表.我可以像这样获取拉取请求:

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出:

* [new ref]         refs/pull/1/head -> origin/pr/1/head
* [new ref]         refs/pull/1/merge -> origin/pr/1/merge
* [new ref]         refs/pull/10/head -> origin/pr/10/head
* [new ref]         refs/pull/10/merge -> origin/pr/10/merge
* [new ref]         refs/pull/11/head -> origin/pr/11/head
* [new ref]         refs/pull/11/merge -> origin/pr/11/merge
Run Code Online (Sandbox Code Playgroud)

现在我想结帐其中一个参考.我没有尝试似乎工作:

$ git checkout refs/pull/1/head
error: pathspec 'refs/pull/1/head' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

要么:

git checkout origin/pr/1/head
error: pathspec 'origin/pr/1/head' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)

我该如何查看此参考资料?

Ric*_*sen 9

第一个命令(git checkout refs/pull/1/head)不起作用,因为它refs/pull/1/head是远程存储库中引用的名称.您在本地存储库中没有具有该名称的引用,因为您的fetchrefspec将其转换为refs/remotes/origin/pr/1/head.

第二个命令(git checkout origin/pr/1/head)应该有效,虽然它应该给你一个"分离的HEAD"警告.在将问题发布到Stack Overflow时,您是否修复了错字?

您的fetchrefspec告诉git将远程引用转换为refs/remotes目录中的本地引用.该目录中的引用被特别处理 - 它们是"远程引用",用于指示上次执行时远程存储库的状态fetch.通常,您不希望直接检查这些引用 - 您希望创建一个配置为"跟踪"或"跟踪"远程引用的本地分支(这将启用特殊的便捷快捷方式,例如@{u}修订参数和更容易push/ pull使用).

尝试:

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
git checkout -b whatever-branch-name-you-want origin/pr/1/head
Run Code Online (Sandbox Code Playgroud)

上面创建了一个名为whatever-branch-name-you-want(我建议调用它pr/1/head)的新本地分支,指向同一个提交origin/pr/1/head,配置whatever-branch-name-you-want为跟踪origin/pr/1/head,然后切换到新分支.