如何在GitHub上打开多个拉取请求


139

当我在GitHub上打开请求请求时。 自上次请求以来的所有提交和所有新提交都会自动添加到此请求中

我似乎无法控制要添加哪些提交,哪些不添加。
当我尝试打开另一个请求请求时,出现“糟糕!已经存在一个请求请求”错误。

有什么简单的方法可以打开多个拉取请求,而不必弄乱命令行?

Answers:


116

拉取请求基于分支。
打开多次提交的拉取请求的唯一方法是:

  1. 将它们隔离到自己的分支中
  2. 从那里打开拉取请求。

3
好的,那很酷,我以为只有主人。因此,您的意思是说我可以创建许多分支(即git flow features)并为每个分支发出拉式请求。
Ziyan Junaideen

8
我只是发现分支保留了先前提交的历史记录,因此针对上游的拉取请求仍包含所有提交。
eel ghEEz 2016年

2
@ eel-gheez,您好,您知道要怎么做吗?如何创建隔离的PR,而不显示其他分支的更改?
乔纳森·克罗斯

3
这不能解决问题:当我尝试创建PR时,将比较两个分支(每个分支至少具有一个提交)。我究竟做错了什么?
MERose

1
@eelghEEz您应该创建一个新分支,git cherry-pick您想要对该分支的所有提交,然后从该分支发出拉取请求。git的一个非常重要的设计功能是每个提交都依赖于其先前的提交,并且git中的提交不应该只是一个补丁,而应该是一个知道在此之前应用了什么补丁的补丁。因此,这就是为什么应该使用新的提交创建一个新分支的原因,它们的差异可能仍然相同,但是与先前提交的链接不同。
MD

11

我发现最简单的方法是使用hub命令(https://github.com/defunkt/hub)。

从您要为其创建拉取请求的主题分支(在本示例中为“功能”),您可以运行:

git pull-request

(请记住首先推动您的分支!)

它将在GitHub上为“ YOUR_USER:feature”打开一个新的拉取请求。

如果您已经在GitHub上创建了问题,您甚至可以将拉取请求附加到该现有问题上(您无法通过Web UI执行此操作):

$ git pull-request -i 123
[ attached pull request to issue #123 ]

2

您实际上可以在不创建另一个分支的情况下执行此操作,但是这需要花费一些时间。
步骤如下:

  1. 确定要提取的两个提交范围。这是我将使用的示例:(
    其他/主服务器)A-> B-> C-> D-> E(您的主服务器)
    假设您要在一个请求中提取B和C,D和E在另一个。
  2. 提出拉取请求。将左侧(“ Base”)作为提交A。对于右侧(“ head”),键入提交号C。
  3. 写下您的第一个请求的描述。
  4. 提出另一个要求。对于base,输入提交号C,对于head,输入E(您的用户/ master)。
  5. 写说明。

如我所见,pull请求将提交C视为分支点。或者其他的东西。


即使您要添加自己的/主控的提交编号,也必须将其他/主控留在左侧。同样,如果需要更多更改,此方法也不允许您向合并请求中添加新的提交。
frisco 2012年

与Github上的一些信息相比,我对此答案发布了一些后续信息,请参见stackoverflow.com/questions/23159860
Mark Bennett 2014年

我可以看到,这将创建两个看起来正确的PR,因为它们每个都完全包含所需的提交。但是,明确地说,合并后,这样做是否正确?如图所示,我可以看到第一个PR将B&C正确合并到其他/ master中。但是,当第二个PR合并时,它如何知道要合并到哪个分支中?(由于它是在提交'C'上创建的,而不是在其他/主数据库上创建的)PR合并的顺序无关紧要?(大概是这样)
乔纳森·哈特利

1

最初创建拉取请求时,如果为新的拉取请求打开两个单独的表单,则只要它们指向要合并的不同分支,就可以创建它们。例如,我可以发出两个单独的请求,一个合并到主请求,另一个合并到测试。


1

我是Git和GitHub的新手,并且有与OP相同的问题。

我找到了一个解决方案,该解决方案可能在OP时代尚不可用。

情况:您有3个更改,并且您希望每个都在前一个基础上构建,并且每个都有自己的拉取请求(PR)。

问题:当您创建第一个试图将开发人员拉入开发者的PR时,一切看起来都很好,但是在对第二个PR进行更改并合并(使用同一分支)之后,所有更改都在同一个PR中。

迷你解决方案:创建一个新分支

git branch mini_change_2
git checkout mini_change_2

现在,将代码推送到GitHub并创建PR,但是默认情况下将其从mini_change_2拉到master,除非master尚未从第一个PR进行更改,因此它包括PR1和PR2的所有更改。

最佳解决方案:指定要在PR2中合并到的分支。

创建第二个PR时不要只接受默认值,例如要将mini_chnage_2拉到Develop,这只会显示mini_change_2中的更改

现在创建一个新的分支mini_change_3和PR到mini_change_3。

一旦开始合并它们,问题就来了……但这是另一回事。

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.