166

我想从 GitHub 克隆一个存储库。问题是我不想要主分支;我想要这个未经批准的拉取请求中的版本。

我是否可以克隆拉取请求版本而不是主存储库?

4

13 回答 13

150

最简单的方法是这样的:

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

您现在将位于处于拉取请求状态的新分支上。

您可能希望通过运行设置别名

git config --global alias.pr '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

现在你可以通过运行检查任何 PR git pr <pr_number>,或者git pr <pr_number> <remote>如果你的 github 远程没有命名origin

于 2013-02-20T00:04:48.470 回答
109

您可以使用-b选项克隆您想要的分支,并用于拉取请求:

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

在您的情况下,您要克隆的分支是拉取请求的源分支(feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support
于 2013-02-19T00:42:41.277 回答
49
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

例如:

git fetch origin pull/611/head:pull_611
git checkout pull_611

在 GitHub 上从你的 fork 进行更改、提交、推送和打开新 PR

于 2015-02-20T05:12:21.130 回答
17

您可以按照此要点中的说明直接签出远程,而无需弄清楚它们的存储库和分支。

示例用法

对于我的一个项目(github3.py),我在我的github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = git@github.com:sigmavirus24/github3.py

第一行是每个遥控器的标准,但github被遥控器名称替换的例外。这意味着远程头(或该服务器上的分支头)被“映射”到前缀为github/. 因此,如果我git fetch github在 GitHub 上有一个在我的机器上本地尚未注意到的分支,它会下载该分支,我可以像这样切换到它git checkout -t github/branch_name

第二行做同样的事情,但它是为拉取请求而不是标准的 git 分支做的。这就是你看到的原因refs/pull/*/head。它获取 GitHub 上每个拉取请求的头部并将其映射到github/pr/#. 因此,如果有人发送一个拉取请求并且它的编号为 62(例如),你会这样做:

git fetch github
git checkout -t github/pr/62

然后你会在一个名为的本地分支上pr/62(假设它不存在)。这很好,意味着您不必跟踪其他人的遥控器或分支机构。

于 2013-02-19T00:45:26.613 回答
16
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

如何为我不拥有的分支获取未合并的拉取请求?

于 2015-09-08T00:29:03.517 回答
7

当用户提交拉取请求时,他们要求将一些更改从其分叉克隆上的分支合并回另一个用户的存储库。

您想要的更改可以从拉取请求的来源获得。为此,请克隆用户的存储库 ( git://github.com/berstend/frappe.git),然后检查他从 ( feature/mongoose-support) 创建拉取请求的分支。

于 2013-02-19T00:43:50.737 回答
4

使用 Github 的官方新命令行界面

gh repo clone org/repo
cd repo
gh pr checkout 44

其中44是 PR 编号,但也可以是分支名称。


请参阅其他详细信息和选项以及安装说明

于 2020-04-27T14:05:42.830 回答
3

要将 PR 拉到您当前的分支,请使用:

git pull origin pull/418/head

这里pull/{no. of PR}/head

在此处输入图像描述

于 2021-09-08T18:13:30.873 回答
2

对我来说,这很简单

git fetch origin pull/4/head

4这里找到的地方:

在此处输入图像描述

于 2020-02-03T01:44:13.273 回答
1

安装git-extras后

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

你可以简单地使用git pr

$ git pr 62 [remote]
于 2015-01-11T03:22:06.717 回答
1

列出和获取 PR 的 BitBucket 约定:

git ls-remote origin 'refs/pull-requests/*'
git fetch origin refs/pull-requests/998/from:local-branch-name

全文在这里:https ://www.atlassian.com/git/articles/pull-request-proficiency-fetching-abilities-unlocked

于 2021-06-02T10:37:22.527 回答
0

带有“-b”选项的公认答案对我不起作用,所以这就是我最终得到的。在 Github 中创建拉取请求后,您将被带到可以看到如下内容的页面,其中“ogryb”是我的用户名,“patch-1”是分配给它的自动生成的名称。

在此处输入图像描述

您现在需要做的就是单击右侧突出显示的名称,这将带您进入带有以下链接的页面:

在此处输入图像描述

单击绿色“代码”按钮的右侧,可以看到一个漂亮的个性化 git 链接,可用于克隆或对现有拉取请求添加更多更改。

于 2020-11-12T16:50:24.817 回答
-1

该拉取请求显示来自该人的分支的提交,因此您可以看到他正在从feature/mongoose-support分支推送他的更改。

您可以克隆他的存储库并签出该分支

于 2013-02-19T00:36:15.273 回答