git签出远程引用

git签出远程引用,git,github,Git,Github,我在github上有一个pull请求列表。我可以获取如下拉取请求: git fetch origin +refs/pull/*:refs/remotes/origin/pr/* * [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

我在github上有一个pull请求列表。我可以获取如下拉取请求:

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
* [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
我得到如下输出:

git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
* [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
现在我想签出其中一位裁判。我尝试的东西似乎都不管用:

$ git checkout refs/pull/1/head
error: pathspec 'refs/pull/1/head' did not match any file(s) known to git.
或:


如何签出此参考资料?

请查看可用于签出的内容

git branch -a
第一个命令(
git checkout refs/pull/1/head
)不起作用,因为
refs/pull/1/head
是远程存储库中引用的名称。您的本地存储库中没有使用该名称的引用,因为
fetch
refspec将其转换为
refs/remotes/origin/pr/1/head

第二个命令(
git-checkout-origin/pr/1/head
)应该已经工作了,尽管它应该给您一个“detached-head”警告。在将问题发布到Stack Overflow时,您是否纠正了输入错误

您的
fetch
refspec告诉git将远程引用转换为
refs/remotes
目录中的本地引用。该目录中的引用是经过特殊处理的——它们是“远程引用”,用于指示上次执行
获取时远程存储库的状态。通常,您不希望直接签出这些引用——您希望创建一个配置为“跟随”或“跟踪”远程引用的本地分支(这可以启用特别方便的快捷方式,例如
@{u}
修订参数和更方便的
推送
/
拉取
用法)

尝试:


上面创建了一个新的本地分支,名为
您想要的任何分支名称
(我建议称它为
pr/1/head
),指向与
origin/pr/1/head
相同的提交,配置
您想要的任何分支名称
跟踪
origin/pr/1/head
,然后切换到新分支。

您是正确的。第二个命令奏效了。不知道我第一次在做什么。谢谢。也可以推到新创建的分支并修改拉取请求吗?确实非常有用。