【问题标题】:git checkout remote referencegit checkout 远程参考
【发布时间】:2018-11-07 15:15:26
【问题描述】:

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

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 checkout origin/pr/1/head
error: pathspec 'origin/pr/1/head' did not match any file(s) known to git.

如何查看此参考资料?

【问题讨论】:

    标签: git github


    【解决方案1】:

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

    第二个命令 (git checkout origin/pr/1/head) 应该可以工作,尽管它应该给你一个“分离的 HEAD”警告。您在将问题发布到 Stack Overflow 时是否修正了错字?

    您的 fetch refspec 告诉 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
    

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

    【讨论】:

    • 你是对的。第二个命令有效。不知道我第一次在做什么。谢谢。
    • 是否也可以push到新建的分支,修改pull request?
    【解决方案2】:

    查看可用于结帐的内容

    git branch -a
    

    【讨论】:

    • 确实非常有用的标志。
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2014-07-06
    • 2021-06-21
    • 2021-08-22
    • 2015-03-07
    • 2012-08-01
    • 2021-03-14
    • 2014-07-29
    相关资源
    最近更新 更多