从拉取请求克隆 GitHub?

问题描述 投票:0回答:13

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

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

git github pull-request
13个回答
182
投票

最简单的方法是这样的:

git fetch origin pull/<pr_number>/head:<local_branch_name>
git switch <local_branch_name>

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

您可能想通过运行来设置别名

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

现在您可以通过运行

git pr <pr_number>
来查看任何 PR,如果您的 github 远程未命名为
git pr <pr_number> <remote>
,则运行
origin


114
投票

您可以使用

-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

55
投票
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

例如:

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

进行更改、提交、推送并从 GitHub 上的分支打开新的 PR


20
投票
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

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


18
投票

您可以按照这个要点中的说明进行操作,以便能够直接检查远程设备,而无需弄清楚它们的存储库和分支。

使用示例

对于我的一个项目(github3.py),我的

github3.py/.git/config

中有以下内容
[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = [email protected]: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
的本地分支(假设它尚不存在)。这很好,意味着您不必跟踪其他人的遥控器或分支机构。


7
投票

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

您想要的更改可以从拉取请求的源中获取。为此,请克隆用户的存储库 (

git://github.com/berstend/frappe.git
),然后查看他从中创建拉取请求的分支 (
feature/mongoose-support
)。


5
投票

配合Github官方全新命令行界面

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

其中

44
是PR号码,但也可以是分支名称。


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


5
投票

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

git pull origin pull/418/head

这里

pull/{no. of PR}/head


3
投票

对我来说,这很简单

git fetch origin pull/4/head

在这里找到

4


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]

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-powered-unlocked


-1
投票

该拉取请求显示了该人的分支的提交,因此您可以看到他正在从

feature/mongoose-support
分支推送他的更改。

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


-1
投票

带有“-b”选项的接受答案对我来说不起作用,所以这就是我最终得到的结果。在 Github 中创建拉取请求后,您将进入如下页面,其中“ogryb”是我的用户名,“patch-1”是自动生成的分配给它的名称。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.