在Github中将拉取请求合并到默认的不同分支

eoi*_*noc 110 git github pull-request

拉取请求进入我在Github上托管的仓库.默认情况下,它会合并到master分支中.

我有什么方法可以更改哪些分支将合并到哪个分支中?

mal*_*yas 71

截至2016年8月15日, GitHub允许通过GUI更改拉取请求的目标分支.单击Edit标题旁边的,然后从下拉列表中选择分支.

截图

您现在可以更改打开拉取请求的基本分支.创建拉取请求后,您可以修改基本分支,以便将拉取请求中的更改与其他分支进行比较.通过更改原始拉取请求的基本分支而不是使用正确的基本分支打开新分支,您将能够保持有价值的工作和讨论.

  • 啊! 它确实!首先需要点击"编辑"(从上面的截图中看不出来).我忽略了这个.抱歉. (12认同)
  • 这应该是这个问题的正确答案(升级到 GitHub ie 之后)。 (2认同)

Dan*_*man 52

提交者可以在发出拉取请求时更改它,但一旦发出请求,您就无法更改它.

另一方面,您可以手动合并他们的分支和推送,这是我经常为错误的拉取请求做的.

您可能会发现hubgem有助于处理pull请求的组件.

那个gem包含了手动过程,即:

  1. 将fork 的遥控器添加到本地结帐.
  2. 获取该遥控器.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

  • 我不确定,但不是直接 - 因为更改没有合并到目标分支,因此拉取请求未按定义完成.您需要手动关闭它.至于指针,请参阅编辑过的评论. (3认同)
  • "一旦发布它就无法改变它" - 截至2016年8月不再是这种情况!请参阅下面的@maliayas的回答:http://stackoverflow.com/a/38985999/12484 (3认同)
  • 我今天(2017 年 3 月 3 日)遵循了这个程序。我将拉取请求下载到另一个分支并对其进行了一些额外的修复,然后合并到主分支。一旦拉取请求的提交最终进入 master,GitHub 就会自动关闭拉取请求。 (2认同)

Grz*_*icz 13

使用其他答案提到的hub gem的替代方法是使用命令行来合并本地pull请求,这允许您执行以下操作:

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Run Code Online (Sandbox Code Playgroud)

如果您首先将以下行添加到.git/config文件中,则上述命令只能直接使用:

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
Run Code Online (Sandbox Code Playgroud)

这样做可以让你下载所有拉取请求.由于可能不需要大量的repos,GitHub修改了指令以使用git fetch origin pull/ID/head:BRANCHNAME语法,这避免了修改配置文件并且只下载了单个pull请求.


Gui*_*lla 8

Daniel Pittman的解决方案没有任何问题,但我会将这些合并视为"没有快进",即更改第3步:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Run Code Online (Sandbox Code Playgroud)

通过使用--no-ff,历史将更容易阅读.它会清楚地表明$n提交来自$branch,如果您需要恢复在该分支中完成的任务,它也将使您的生活更轻松.

还要回答eoinoc的问题,并提供额外的提示:

在进行合并之后,你的git cli会提示你写一条消息,通常一条通用消息会显示出类似的内容

将远程跟踪分支'user/their-branch'合并到您的分支中

确保编辑该消息并包含对拉取请求编号的引用.即:(假设拉请求数为123)

将远程跟踪分支'user/their-branch'合并到您的分支中

refs#123解决任何问题......

因此,下次当您访问github问题/ pull-requests页面并检查特定的pull请求时,您将看到包含提交合并的提交链接的消息.

这是我的意思的屏幕截图.

在此输入图像描述


Car*_*itz 8

虽然您不能更改现有的pull请求,因为它不是您的,如果相关的源存储库仍然存在,您可以轻松地创建一个新的请求 - 是的,即使它是其他人的.

转到提交者的存储库,然后使用相同的提交在他/她的存储库中创建一个新的拉取请求,但请确保正确设置正确的目标分支.

然后返回到您自己的存储库并接受新的pull请求.瞧!

  • 直接在GitHub上执行此操作的唯一方法,无需访问本地存储库. (2认同)

abb*_*ood 6

要做到这一点,请转到存储库的主页,单击分支,然后将默认分支从master更改为其他内容,在我的情况下为"dev".

之后,每当有人创建拉取请求时,该merge按钮将自动将请求合并到"dev"而不是master.

在此输入图像描述

  • 没有必要感谢我们调整/编辑.这是我们为网站所做的事情.继续写好答案,这是非常感谢的. (3认同)