在 Github 中,将 pull 请求合并到与 default 不同的分支

一个拉请求进入我的回购托管在 Github。默认情况下,它是合并到 master分支。

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

85900 次浏览

提交者可以在他们发出请求时改变这一点,但是一旦他们发出请求,你就不能改变它了。

另一方面,您可以手动合并它们的分支和 push,对于目标错误的 pull 请求,我会半定期地这样做。

您可能会发现 hub宝石在处理拉请求的组件时很有帮助。

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

  1. 将 fork 的远程 添加到本地签出。
  2. 把遥控器拿来。
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

Daniel Pittman 的解决方案没有错,但是我认为这些合并是“没有快进”的,也就是说,把第三步改为:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}

通过使用 --no-ff,历史将更容易阅读。它将清楚地说明 $n提交来自 $branch,并且如果您需要恢复在该分支中完成的某些操作,它也将使您的生活变得更容易。

为了回答 einoc 的问题并给出一个额外的提示:

完成合并后,git cli 将提示您编写消息,通常会显示一个通用消息,内容如下

将远程跟踪分支‘ user/their-Branch’合并到 your-Branch 中

确保编辑该消息并包含对请求号的引用,即: (假设请求号是123)

将远程跟踪分支‘ user/their-Branch’合并到 your-Branch 中

参考文献 # 123解决了..。

因此,当您下次访问 github 问题/pull-request 页面并检查特定的 pull 请求时,您将看到您的消息带有一个链接,以提交您进行合并的位置。

下面是我的意思的截图。

enter image description here

使用其他答案中提到的 hub gem 的另一种方法是使用 使用命令行合并本地请求,它允许您这样做:

$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*

以上命令只有在您首先向 .git/config文件添加以下代码行时才能直接工作:

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*

它的作用是允许您下载 全部 pull 请求。由于这可能不是大规模回购所需要的,GitHub 修改了指令,使其具有 git fetch origin pull/ID/head:BRANCHNAME语法的特性,从而避免了对配置文件的修改,并且只下载那个单一的拉请求。

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

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

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

要进入存储库的主页,请单击分支,并将默认分支从 master 更改为其他内容,在我的示例中为“ dev”。

之后,每当有人创建一个拉请求时,merge按钮将自动将请求合并到“ dev”而不是 master 中。

enter image description here