如何查看GitHub拉取请求?

Gar*_*lon 205 git github git-checkout pull-request

我想查看以前创建的拉取请求(通过GitHub Web界面创建).我搜索并找到了refs/pull或refs/pull/pr的不同地方

但是当我添加fetch = +refs/pull/*/head:refs/remotes/origin/pr/*到git配置文件并执行git fetch时

我做错了什么?GitHub应该自动创建pull/xyz的东西,还是我必须配置一些东西?

tim*_*mbo 307

要将远程PR提取到您的本地仓库,

git fetch origin pull/ID/head:BRANCHNAME
Run Code Online (Sandbox Code Playgroud)

其中ID是拉取请求ID,而branchname是您要创建的新分支的名称.一旦你创建了分支,那么就这么简单

git checkout BRANCHNAME
Run Code Online (Sandbox Code Playgroud)

  • 我的命令最终看起来像`git fetch origin pull/1/head:githubusername`,而不是我所期待的 (14认同)
  • 我使用它来从上游仓库获取pr到我的本地分叉仓库,你也可以用上游替换原点. (5认同)
  • @Antoine`BRANCHNAME`是您想要为分支命名的任何内容.我猜你试图使用一个已经存在的名称(例如`master`)并且没有用,所以你尝试了你的用户名,这确实有用,因为他们没有那个名字的分支.也许我误解了你在说什么. (5认同)
  • 您可能会以“origin”指向您的分支和“upstream”指向原始存储库的方式配置本地存储库(遵循 https://help.github.com/articles/configuring-a-remote-例如,叉子)。如果您想从原始存储库获取拉取请求,请确保在上述命令中将“origin”更改为“upstream”。 (4认同)
  • 只是一个问题,如何获取这个本地创建的分支的新提交? (3认同)
  • 我试图获取 ID 中包含的“#”符号,如 GitHub 文档中突出显示的那样,如“pull/#1/head:branch”中所示。只有数字必须输入,因此“pull/1/head/branch”。 (2认同)

小智 110

这将获取,而无需您命名分支:

git pull origin pull/939/head
Run Code Online (Sandbox Code Playgroud)

如何在我的机器上获得特定的拉取请求?

  • 请注意,如果您在主分支上执行此操作,例如,它将直接提交到此分支.如果您想将拉取请求带入一个单独的分支进行分段,请尝试@ timbo的答案. (22认同)
  • 同样@phoenix说的是什么.我希望拉取请求分支在我自己的分支机构下复制,而不是主机. (2认同)
  • 如果您稍后想将拉取请求中的更改拉入您的本地分支,这也适用。 (2认同)

Von*_*onC 47

这个要点确实描述了当你进行git fetch时发生的事情:

显然,更改github url以匹配项目的URL.最终看起来像这样:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Run Code Online (Sandbox Code Playgroud)

现在获取所有拉取请求:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...
Run Code Online (Sandbox Code Playgroud)

要查看特定的拉取请求:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'
Run Code Online (Sandbox Code Playgroud)

问题259中列出了各种脚本以自动执行该任务.
混帐额外的项目提出了命令git-pr(在实施PR 262)

git-pr(1) - 在本地检查拉取请求

概要

git-pr <number> [<remote>]
git-pr clean
Run Code Online (Sandbox Code Playgroud)

描述

根据GitHub拉取请求编号创建本地分支,然后切换到该分支.

要获取的远程的名称.默认为origin.

例子

226将从origin以下位置检出拉取请求:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
Run Code Online (Sandbox Code Playgroud)


And*_*maz 33

我更喜欢在不创建本地分支的情况下获取和检出并处于HEAD分离状态.它允许我快速检查拉取请求,而不会使用不必要的本地分支机构污染本地计算机.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

其中ID是拉取请求ID,upstream其中创建了原始拉取请求(origin例如,可能是).

我希望它有所帮助.

  • 我喜欢这个解决方案。好处之一是,如果 PR 更新了更多提交,那么您可以再次运行它,它将引入新的提交。 (2认同)

bag*_*ard 16

Github 最近发布了一个名为github-cli的 cli 实用程序。安装后,您可以使用其 id ( doc )在本地检出拉取请求的分支

例如: gh pr checkout 2267

这也适用于分叉,但如果您随后需要推回分叉,则需要添加远程存储库并使用传统的git push(直到此在 gh 实用程序中实现)


bho*_*bar 13

参考Steven Penny的答案,最好创建一个测试分支并测试PR.所以这就是你要做的.

  1. 创建一个测试分支以将PR合并到本地.假设你在主分支上:

git checkout -b test

  1. 将PR更改纳入测试分支

git pull origin pull/939/head:test

现在,您可以安全地测试此本地测试分支上的更改(在本例中为命名测试),一旦您满意,就可以像往常一样从GitHub合并它.


ose*_*003 9

对于 Bitbucket,您需要将单词替换pullpull-requests

首先,您可以通过git ls-remote origin命令确认拉取请求 URL 样式。

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...
Run Code Online (Sandbox Code Playgroud)

如您所见,它refs/pull-requests/1503/from不是refs/pull/1503/from

然后你可以使用任何答案的命令。


小智 8

如果您使用的是Github.com,请转到"拉取请求",单击相关的拉取请求,然后单击"命令行说明"链接: Github.com上的命令行说明


ini*_*it0 7

如果您遵循“github fork”工作流程,您可以在其中创建一个 fork 并添加远程上游存储库:

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)
Run Code Online (Sandbox Code Playgroud)

要拉入您当前的分支,您的命令将如下所示:

git pull upstream pull/<pull_request_number>/head
Run Code Online (Sandbox Code Playgroud)

要拉入新分支,代码将如下所示:

git fetch upstream pull/<pull_request_number>/head:newbranch
Run Code Online (Sandbox Code Playgroud)


Ari*_*zon 6

上面某些选项的问题在于,如果有人在打开PR后将更多提交推送到PR,他们将不会为您提供最新版本。对我而言,最有效的方法是-转到PR,然后按“提交”,滚动到底部以查看最新的提交哈希 在此处输入图片说明 然后简单地使用git checkout,即

git checkout <commit number>

在上面的例子中

git checkout 0ba1a50

  • 我使用/sf/answers/2140946601/中提到的`git fetch origin pull / ID / head:BRANCHNAME`方法来解决这个问题。感谢您的解决方案! (2认同)

Tom*_*cek 6

您可以使用git config命令编写新规则以.git/config从存储库中获取拉取请求:

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'
Run Code Online (Sandbox Code Playgroud)

然后就是:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3
Run Code Online (Sandbox Code Playgroud)

  • 将其推回上游进行更新怎么样? (2认同)

Dan*_*ner 6

我正在使用 hub,一个来自 github 的工具:https : //github.com/github/hub

使用集线器在本地检查拉取请求有点容易:

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234
Run Code Online (Sandbox Code Playgroud)


mah*_*mnj 6

尽管此线程上的大多数答案都有效,但我更喜欢在新分支中获取拉取请求并对旧提交进行软重置(将 PR 更改移动到暂存区域),这使我可以测试 PR 更改:以及在我的 IDE 中查看差异。

git fetch origin pull/<PR-id>/head:<BRANCH_NAME>
git checkout BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)

然后对旧提交进行软重置(使用 参见提交列表git log

git reset --soft <hash_of_old_commit>
Run Code Online (Sandbox Code Playgroud)

例如

git fetch origin pull/<PR-id>/head:<BRANCH_NAME>
git checkout BRANCH_NAME
Run Code Online (Sandbox Code Playgroud)

运行上述命令将提取 PR 的更改并在您的 IDE 版本中显示它们,并且它们不会被提交,您可以在暂存区域中看到差异(就好像这些更改是在本地进行的一样。)

参考:Github 文档参考