从请求请求中克隆GitHub?


Answers:


87

您可以使用-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

112

最简单的方法是这样的:

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

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

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

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

现在,您可以通过运行git pr <pr_number>,或者git pr <pr_number> <remote>如果您的github遥控器未命名,来签出任何PR origin


49
更好:git fetch origin pull/<#>/head:<local_branch_name>通过
schlamar

5
我发现自己经常引用此SO答案,因此将其粘贴到.gitconfig文件中的下[alias]pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f"。这样,我只需键入git pr upstream 62,然后我便知道下一件事,我从上游进入PR#62的新分支!如果您始终使用origin,则可以使用而不是对其进行硬编码$1,但这对我来说是正确的。
马特---

@matt假定您有一个名为checkout的别名co
Michael McQuade

43
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


我如何在本地合并这些分支?我只是像上面一样克隆并获取了一个未合并的拉取请求,并尝试签出分支名称。但是在我的IDE /文本编辑器中没有任何更改。
erginduran '17

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(假设它尚不存在)。很好,这意味着您不必跟踪其他人的遥控器或分支机构。


2
为什么不?它准确地解释了如何以便捷有效的方式执行此操作。
伊恩·斯台普顿·科尔达斯科

因为我是菜鸟,所以该文档很难理解。我永远也不会从“没有得到”到git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone要点文件中。
Fresheyeball 2013年

6
要点文档的作用是添加一组额外的信息(引用或引用)以从GitHub中获取。当你做的时候你就git fetch github可以做git co -t github/pr/#。这样可以避免您不得不复制和粘贴远程URL,弄清分支名称等。然后,您将获得命名准确,简明而准确的分支名称,而无需额外麻烦。但我知道它似乎势不可挡。
伊恩·斯塔普尔顿·科尔达斯科

不错哦。我不知道这个+1!能给我一个完全合格的例子吗?
Fresheyeball 2013年

@ sigmavirus24非常感谢您提供的信息;我想知道bitbucket是否存在类似的技巧?
彼得·科泽尔卡

8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

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


1
注意git pull创建合并到当前分支;通常对于PR,您只想git fetch获取原始作者的代码(然后可以通过FETCH_HEAD访问)。如果您确实想要合并,还值得一提pull/2/merge(而不是pull/2/head),这使GitHub为您提供了如果您现在单击[Merge]按钮会发生的确切合并提交。
贝尼·切尔尼亚夫斯基-帕斯金

6

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

所需的更改可以从拉取请求的源中获取。为此,请克隆用户的存储库(git://github.com/berstend/frappe.git),然后从(feature/mongoose-support)签出他创建拉取请求的分支。


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]


0

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

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


0

对我来说,就像

git fetch origin pull/4/head

在哪里4找到:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.