如何在GitHub上修改拉取请求以更改合并的目标分支?

188

我有一个 pull request 正在请求将我的分支合并到主分支,但是所有者希望我将请求更改为将其合并到与我的分支不同的另一分支。

这是否可行?有哪些可能的解决方案?

5个回答

241
2016年8月更新: 更改拉取请求的基础分支终于允许更改该分支。
(这也关闭了问题18,该问题已经存在3年,并且有1500多个评论)

在创建拉取请求后,您可以修改基础分支,以便将拉取请求中的更改与不同的分支进行比较。

enter image description here

评论中的spazm所述:

它是(并且一直是)有效的。

当PR关闭时,无法更改目标分支
解决方案是“重新打开”PR(即使用UI中的选项),然后更改目标分支。


原始答案:

由于无法编辑PR的分支(请参见下文),最简单的方法是:

  • 在当前分支之上创建一个本地新分支
  • 推送该新分支
  • 使用正确的目标创建新的PR。
  • 关闭以前的PR
  • 从新的PR引用“旧”拉取请求;例如。 Supersedes #123(由Rivera在下面评论)

(原始答案,仅在创建PR时有效)

您可以尝试选择另一个基础分支,如“更改分支范围和目标存储库”(单击PR页面顶部的编辑按钮)

https://github-images.s3.amazonaws.com/help/pull_requests/pull-request-review-edit-branch.png

最简单的理解分支范围的方法是这样的: - 基础分支 是您认为应该应用更改的地方, - 目标分支 是您希望应用更改的地方。
更改基础存储库会更改谁会收到拉取请求的通知。 可以推送到基础存储库的所有人都将收到电子邮件通知,并在下次登录时在他们的仪表板中看到新的拉取请求。
如果您选择作为基础分支原始维护者(所有者)想要的分支,则您的PR应从您的分支(未更改)合并到新的基础分支。

4
我可以,但我只会修改PR名称。我假设你不能直接在提交时将PR合并到分支中。我想知道是否有其他方法可以将PR合并到另一个分支中。 - Moriarty
2
有一个功能请求正在进行中,可以更改PR的目标分支:https://github.com/isaacs/github/issues/18 - Jason Antman
1
在新的拉取请求中引用“旧”的拉取请求也是一个好主意(例如,Supersedes #123)。 - Rivera
1
@Shimmy 我不这么认为,无法从Web GUI中实现。 - VonC
1
@spazm 很好的观点。我已经再次编辑了答案,但是请随时自行编辑,并通过这种方式进一步澄清您的评论。 - VonC
显示剩余18条评论

6
如果你的分支仍然可以远程访问,你不需要在本地创建一个新的分支。
  • 直接从下拉菜单或者 "# branches"(https://github.com/account/project/branches)中选择包含你所提交更改的分支。

  • 点击 "New pull request"。这将使你选择一个新的基础(目标)分支。

以下是 Github 新界面的截图: enter image description here

我可以将分支 UX 的 PR 提交到任何 fork/branch 中——之前是否已经提交过分支 UX 的 PR 并不重要。


1
绿色的 “New Pull request” 按钮被移动到 PR 列表网页的右上角。 - 拇指 muzhi.com
我不确定你所说的“is moved”的意思是什么,但是在这两个地方都可以找到绿色按钮“New pull request”。 - mkcor

6
您现在可以: https://github.com/blog/2224-change-the-base-branch-of-a-pull-request “您现在可以更改打开的拉取请求的基础分支。创建拉取请求后,您可以修改基础分支,以便将拉取请求中的更改与不同分支进行比较。通过更改原始拉取请求的基础分支而不是使用正确的基础分支打开一个新的拉取请求,您将能够保留有价值的工作和讨论。”

1

你必须按照 GitHub documentationForm 中提到的方法创建新的拉取请求。

  1. 首先选择新的拉取请求
  2. 在比较页面中,左侧选择您要推送的目标分支,右侧选择您已经推送的分支
  3. 更新您的新PR的详细信息。
  4. 创建PR

-4

很简单。只需点击要更改其基本分支的PR。在网页底部找到“关闭拉取请求”按钮。现在,您可以正常重新创建新的PR - 确保这次选择正确的基本分支。


1
我不明白为什么这个被踩了。这对我来说完全没问题。 - Wilt
4
我没有给这个回答投反对票。但我认为这个回答只是重复了已经存在的旧回答(而且质量还不如以前的)。 - Lars Blumberg
1
@LarsBlumberg 如果你仔细阅读,你应该会注意到这不是重复,尽管可能有一些重叠。对我来说,如果(n-1)步骤可以解决问题,而不是n步骤,那么值得分享 :-) - 拇指 muzhi.com
2
如果省略了有用的步骤,比如关闭旧的PR并在新的PR中引用,那么在(n-1)步之后,我不认为重复已有答案中的子集步骤有价值。特别是当较少步骤的列表由于缺乏适当的格式而更难阅读时。 - Lars Blumberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接