如何更改拉取请求的基础分支?

79

我在GitHub上针对一个特定的远程分支创建了一个拉取请求(pull request)。过了一段时间后,这个远程分支被删除了。

我应该如何修改这个拉取请求,使其指向另一个分支(具体来说是master)?


3
还在 https://github.com/isaacs/github/issues/18 上提出过此请求并向 GitHub 发送了消息,收到了标准的“我们会将其添加到内部故障跟踪器”的回复。 - Ciro Santilli OurBigBook.com
2
https://github.com/blog/2224-change-the-base-branch-of-a-pull-request - Jacob Lowe
7个回答

79

更新内容:如下Michael所述,现在可以更改拉取请求的基础分支:

您现在可以更改开放式拉取请求的基础分支。创建拉取请求后,您可以修改基础分支,使拉取请求中的更改与不同分支进行比较。通过更改原始拉取请求的基础分支而不是打开具有正确基础分支的新拉取请求,您将能够保留有价值的工作和讨论。

点击拉取请求标题旁边的编辑按钮以显示基础分支选择器。

更改拉取请求的基础分支示例动画


旧回答

您不能这样做。只需创建新的拉取请求。


10
直截了当,但不严格准确--请参见此答案 - Tom
7
依赖未记录(及潜在的非预期)的 API 功能将来可能会带来不幸。 - Amber
15
没有人谈论要依靠未经记录的API功能。这个问题是要求解决一次性问题,而不是持续支持的解决方案。无论如何,说“你不能”只是不正确的。 - Tom
5
无论如何,未经记录的API现在已经崩溃了(请参见其他答案的评论),这非常令人悲伤。 - dequis
2
截至2016年8月15日,您可以查看迈克尔的回答。 - maliayas
显示剩余3条评论

35

虽然没有文档,但是你可以使用GitHub REST API来实现这个功能。

API的使用方法在这个答案中有详细说明。基本上,你可以像下面这样发出一个REST请求:

$ curl --user "tom" \
       --request PATCH \
       --data '{"issue": "15", "head": "tom:new-branch", "base": "master"}' \
       https://api.github.com/repos/fred/fabproj/pulls

这将会修改在 fred/fabproj 存储库上体现为问题 15 的拉取请求,改为使用在 tom/fabproj 分支上的 new-branch 分支。

编辑:注意:根据评论,以上内容仅适用于将新的拉取请求附加到现有问题。


1
无法使其正常工作。它抱怨字段“issue”具有不正确的值,可能表明您不能再更改已实例化的拉取请求。遗憾。 - mxcl
1
你确定你的 API 调用正确吗?据我所知,这应该仍然有效,并且有(某种程度上的)文档支持。请参阅 http://developer.github.com/v3/pulls/ (并搜索“Create a pull request”,然后查看“Alternative Input”)。 - Tom
14
我今天再次尝试了一下,确认它已经不再起作用。我会继续探索REST API,希望能找到另一种方法来完成这个任务。 - Tom
1
根据开发者文档,请求类型应为PATCH。另外,头部/基础修改目前不受支持。参考:http://developer.github.com/v3/pulls/#update-a-pull-request - Shekhar
4
嗨,建。正如Tom在2012年12月13日的评论中提到的,这个(可悲的)已经不再起作用了……这很遗憾,因为我今天本可以好好利用它,但是唉! - pvandenberk
显示剩余6条评论

19
截至2016年8月15日,现在可以通过 Github 原生实现此功能:

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


它的工作原理是,用户点击编辑标题,然后“基础:”按钮出现,准备进行更改。 - AnneTheAgile

2

我可以更改目标分支。 确实,我们无法在PR中编辑目标分支的名称。但是诀窍在于将分支重命名为其他内容,然后将您的目标分支重命名为已经存在于PR中的分支。

示例:我的PR的名称类似于“dev-4.9”。还有另一个分支名为“qa-4.9”。我想要的是“qa-4.9”应该是PR目标分支。 步骤:1 1)将“dev-4.9”分支重命名为其他名称“original-dev-4.9”

git checkout dev-4.9
git branch -w original-dev-4.9
git push origin original-dev-4.9

2) 将分支“qa-4.9”重命名为“dev-4.9”。

git checkout qa-4.9
git branch -w dev-4.9
git push origin dev-4.9 -f (force push to write entire branch to reflect dev-4.9)

3) 刷新PR链接并查看qa-4.9中的提交反映在那里。


1

不要失去与已删除分支相关联的所有评论,而是:

  1. 在本地再次创建具有相同名称和与您要合并到的分支相同的内容的分支;
  2. 将该分支推送以重新创建远程分支;然后
  3. 重新打开到该分支的PR。

例如,您有一个针对branch1的PR,但该分支已被删除。现在,您想要合并到master并保留现有PR上的注释:

  1. git checkout master
  2. git pull
  3. git checkout -b branch1
  4. git push
  5. 重新打开您的PR到branch1
  6. 当合并到branch1时,合并到master。

这有点hacky,但比破坏许多评论要好得多。


我一开始没有跟上,所以为了澄清给其他读者(就像我一样笨的人)这是给你控制的repo而且你已经提交了PR的情况下使用的。我在寻找一个更新我已经提交到一个我无法控制的开源项目的PR的方法。 - rtpHarry

0

Github 现在支持此功能。PR 右侧有编辑按钮。


-2

从理论上讲...

你应该使用 Github API

例如:使用Curl编辑Pull请求

curl --user "your_github_username" \
     --request PATCH \
     --data '{"title":"newtitle","body":"newbody",...}' \
     https://api.github.com/repos/:owner/:repo/pulls/:number

你可以在GitHub 开发者文档中找到详细的数据列表。

例子:更改我的拉取请求的名称

curl --user "jeremyclement" \
     --request PATCH \
     --data '{"title":"allows the control of files and folders permissions."}' \
     https://api.github.com/repos/Gregwar/Cache/pulls/9

但实际上...

看起来字段 head/labelhead/ref 无法编辑。目前,唯一的解决方案似乎是 使用Amber的方法


这对当前答案有什么增益? - Léo Lam
它确认了Amber的响应,尽管Tom也有响应。 - hexaJer
2
这证实了这个答案根本不需要。它对当前的答案没有任何贡献。Tom的答案已经有一个通知,说明它不再适用,评论也表明了这一点。 - Léo Lam

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