如何查看GitHub拉取请求?

时间:2014-12-19 14:14:32

标签: git github pull-request git-checkout

我想查看之前创建的拉取请求(通过GitHub网络界面创建)。我搜索并找到了refs / pull或refs / pull / pr

的不同地方

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

我做错了什么? GitHub应该自动创建pull / xyz内容,还是我必须配置什么?

21 个答案:

答案 0 :(得分:246)

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

git fetch origin pull/ID/head:BRANCHNAME

其中ID是拉取请求ID,BRANCHNAME是您要创建的新分支的名称。一旦你创建了分支,那么只需

git checkout BRANCHNAME

有关详情,请参阅official GitHub documentation

答案 1 :(得分:98)

这将在不必命名分支的情况下获取:

git pull origin pull/939/head

How do I get a specific pull request on my machine?

答案 2 :(得分:43)

That gist确实描述了执行git fetch时发生的事情:

  

显然,更改github网址以匹配您项目的网址。最终看起来像这样:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
  

现在获取所有拉取请求:

$ 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
...
  

检查特定的提款请求:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

issues 259中列出了各种脚本以自动执行该任务 git-extras 项目提出了git-pr命令(在PR 262中实施)

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

  

概要

git-pr <number> [<remote>]
git-pr clean
  

描述

     

根据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'

答案 3 :(得分:25)

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

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

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

我希望它有所帮助。

答案 4 :(得分:11)

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

  1. 创建测试分支以将PR合并到本地。假设你在主分支上:
  2. git checkout -b test

    1. 将PR更改纳入测试分支
    2. git pull origin pull/939/head:test

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

答案 5 :(得分:8)

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

例如:gh pr checkout 2267

答案 6 :(得分:8)

如果您正在使用Github.com,请转到&#34;拉取请求&#34;,单击相关的拉取请求,然后单击&#34;命令行说明&#34;链接: command line instructions at Github.com

答案 7 :(得分:5)

  1. 在Github上打开PR。 PR页面顶部是一个数字,用于标识它-123和作者分支的名称-branch-name。复制这两个。
  2. 打开git bash并通过运行git status
  3. 来确保您的工作目录是干净的
  4. 通过键入git fetch upstream pull/<id>/head:<branch>获取PR的副本。在此示例中,您将输入git fetch upstream pull/123/head:branch-name
  5. 现在您有了分支的副本,请使用git checkout branch-name切换到该分支。现在,您的目录将是PR的精确副本。一定要告诉作者任何错误或建议,因为您不能直接将自己的更改添加到拉取请求中。
  6. 完成他们的工作后,使用git checkout master返回到您的Project Porcupine的本地版本

在此处查看完整说明-https://github.com/TeamPorcupine/ProjectPorcupine/wiki/How-to-Test-a-Pull-Request#testing-someone-elses-pull-request

答案 8 :(得分:5)

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

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

然后只是:

$ 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

答案 9 :(得分:4)

对于Bitbucket,您需要将pull替换为pull-requests

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

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

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

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

答案 10 :(得分:4)

我不小心写了几乎与git-extras提供的相同。因此,如果您更喜欢单个自定义命令而不是安装一堆其他额外命令,只需将this git-pr file放在$PATH的某处,然后您就可以写:

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

答案 11 :(得分:3)

如果你正在关注“github fork”工作流程,你可以在其中创建一个fork并添加远程上游repo:

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)

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

git pull upstream pull/<pull_request_number>/head

进入一个新的分支代码看起来像:

git fetch upstream pull/<pull_request_number>/head:newbranch

答案 12 :(得分:3)

上面的一些选项存在的问题是,如果有人在打开PR后推送更多提交PR,他们就不会给你最新的版本。 对我来说最有效的方法是 - 转到公关,然后按“提交”,滚动到底部以查看最新的提交哈希 enter image description here 然后简单地使用git checkout,即

git checkout <commit number>

在上面的例子中

git checkout 0ba1a50

答案 13 :(得分:3)

使远程PR分支进入本地分支:

git fetch origin ‘remote_branch’:‘local_branch_name’

将本地分支的上游设置为远程分支。

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

当您要将本地更改再次推送到PR分支

git push origin HEAD:remote_PR_Branch_name

答案 14 :(得分:0)

我正在使用集线器,它是github上的工具:https://github.com/github/hub

使用集线器在本地检出拉取请求很容易:

hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234

答案 15 :(得分:0)

假设您的来源和上游信息如下所示

   $ 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_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

您的分支名称类似于

   <repo_owner>:<BranchName>

然后

   git pull origin <BranchName>

应做

答案 16 :(得分:0)

检查 PR 并查看该 PR 的所有更改,与 VSCode 中的主分支相比。类似于 Github PR 页面的 files changed 部分。

  1. 结帐 PR (100) 处于“分离的 HEAD”状态
    git fetch origin pull/100/head && git checkout FETCH_HEAD

  2. 显示为未提交的更改
    git reset main

  3. 切换回主分支并进行这些更改
    git switch -

答案 17 :(得分:0)

使用较新版本的 Git:

{{1}}

答案 18 :(得分:-1)

使用 git-cli 有一种简单的方法可以做到这一点

gh pr checkout {<number> | <url> | <branch>}

参考:https://cli.github.com/manual/gh_pr_checkout

答案 19 :(得分:-1)

创建本地分支

git checkout -b local-branch-name

拉远程 PR

git pull git@github.com:your-repo-ssh.git remote-branch-name

答案 20 :(得分:-2)

如果他们的提交位于其分叉存储库的主分支上,那么您可以执行以下操作。

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD