【问题标题】:How to change the base branch of a pull request?如何更改拉取请求的基本分支?
【发布时间】:2012-04-09 23:15:56
【问题描述】:

我在 GitHub 上的项目上创建了一个到特定远程分支的拉取请求。过了一段时间,远程分支被删除了。

如何更改拉取请求以指向另一个分支(特别是 master)?

【问题讨论】:

标签: github pull-request


【解决方案1】:

更新:正如迈克尔在下面指出的那样,this is now possible

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

单击拉取请求标题旁边的 Edit 按钮以显示基本分支选择器。


旧答案

你不能。只需提出一个新的拉取请求。

【讨论】:

  • 直截了当,但并非完全正确——请参阅this 答案。
  • 依赖未记录的(可能是无意的)API 功能会导致悲伤。
  • 没有人提及依赖未记录的 API 功能。这个问题要求解决一次性问题,而不是永久支持的持续解决方案。无论如何,说“你不能”是不真实的。
  • 无论哪种方式,未记录的 API 现在都已损坏(请参阅另一个答案的 cmets),这非常可悲。
  • 自 2016 年 8 月 15 日起,您可以。请参阅迈克尔的回答。
【解决方案2】:

虽然没有记录,但您可以使用 GitHub REST API 来执行此操作。

API 的用法在this answer 中有说明,但基本上你可以像这样发出 REST 请求:

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

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

编辑:注意:根据 cmets,以上内容仅用于拉取请求附加到现有问题

【讨论】:

  • 无法让它工作。它抱怨字段 issue 的值不正确,可能表明您不能再更改已经实例化的拉取请求。耻辱。
  • 您确定您的 API 调用正确吗?据我所知,这应该仍然有效,并且(有点)记录在案。请参阅developer.github.com/v3/pulls(并搜索“创建拉取请求”,然后查看“替代输入”)
  • 我今天又试了一次,可以确认它不再工作了。我将继续探索 REST API,希望能找到另一种方法。
  • 根据开发者文档,请求类型应该是补丁。另一件事是目前不支持头部/基础修改。参考:developer.github.com/v3/pulls/#update-a-pull-request
  • 嘿,简,正如 Tom 在 2012 年 12 月 13 日的 cmets 中提到的那样,这(可悲!)不再起作用了……真可惜,因为我今天可以好好利用它,但是唉!
【解决方案3】:

截至 2016 年 8 月 15 日,这现在可以通过 Github 本地实现:

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

【讨论】:

  • 它的工作原理是按下编辑标题,然后出现“base:”按钮,准备更改。
【解决方案4】:

我可以更改目标分支。 确实,我们不能在 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 url 并查看 qa-4.9 中反映的提交。

【讨论】:

    【解决方案5】:

    而不是将与 PR 连接的所有 cmets 丢失到已删除的分支:

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

    例如,您有一个到 branch1 的 PR,它已被删除。您现在想要合并以掌握并保留现有 PR 上的 cmets:

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

    这有点hacky,但比销毁大量cmets要好得多。

    【讨论】:

    • 我没有跟着开始,所以只是为了向其他读者澄清(或者 >= 像我一样愚蠢)这是因为如果你控制了你的 PR 提交给的 repo .我正在寻找一种方法来更新我提交给我无法控制的开源项目的 PR。
    【解决方案6】:

    Github 现在支持这个。 PR右端的编辑按钮。

    【讨论】:

      【解决方案7】:

      理论上...

      你应该使用github api

      示例:使用curl 编辑拉取请求

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

      您可以在github developer doc找到详细的数据列表

      示例:更改my pull request 的名称

      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 字段似乎不可编辑。目前,唯一的解决方案似乎是that of Amber

      【讨论】:

      • 这对当前答案有什么影响?
      • 它证实了 Amber 的反应,尽管 Tom 是这样。
      • 这证实了根本不需要这个答案。这对当前的答案没有任何帮助。汤姆的答案已经有一个通知,它不再适用,并且 cmets 也表明了这一点。
      猜你喜欢
      • 2023-02-23
      • 2017-12-05
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      相关资源
      最近更新 更多