【发布时间】:2012-02-03 21:42:32
【问题描述】:
一个拉取请求进入我托管在 Github 上的存储库。默认合并到master 分支。
我有什么办法可以更改合并到哪个分支?
【问题讨论】:
标签: git github pull-request
一个拉取请求进入我托管在 Github 上的存储库。默认合并到master 分支。
我有什么办法可以更改合并到哪个分支?
【问题讨论】:
标签: git github pull-request
As of 15.08.2016 GitHub 允许通过 GUI 更改拉取请求的目标分支。点击标题旁边的Edit,然后从下拉列表中选择分支。
您现在可以更改打开的拉取请求的基本分支。创建拉取请求后,您可以修改基础分支,以便将拉取请求中的更改与不同的分支进行比较。通过更改原始拉取请求的基础分支而不是打开具有正确基础分支的新分支,您将能够保留有价值的工作和讨论。
【讨论】:
提交者可以在他们发出拉取请求时更改它,但是一旦他们发出它你就不能改变它。
另一方面,您可以手动合并他们的分支并推送,我通常会为目标错误的拉取请求执行此操作。
您可能会发现hub gem 有助于处理拉取请求的组件。
那个gem封装了手动过程,也就是:
git checkout ${target_branch} && git merge ${remote}/${branch}git push origin ...【讨论】:
git merge --no-ff ...。
使用其他答案提到的集线器 gem 的替代方法是 use the command line to merge locally pull requests,它允许您这样做:
$ 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/*
这样做是允许您下载 ALL 拉取请求。由于大型存储库可能不希望这样做,GitHub 修改了说明以使用 git fetch origin pull/ID/head:BRANCHNAME 语法,这样可以避免修改配置文件并且只下载单个拉取请求。
【讨论】:
虽然您不能更改现有的拉取请求,因为它不是您的,但如果相关的源存储库仍然存在,您可以轻松创建一个新的拉取请求 - 是的,即使它是其他人的。
转到提交者的存储库,然后使用相同的提交在他/她的存储库中创建一个新的拉取请求,但请确保您正确设置了正确的目标分支。
然后返回您自己的存储库并接受新的拉取请求。瞧!
【讨论】:
Daniel Pittman 的解决方案没有任何问题,但我会将这些合并视为“没有快进”,即,将第 3 步更改为:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
通过使用--no-ff,历史将更容易阅读。它会清楚地表明$n 提交来自$branch,如果您需要恢复在该分支中完成的某些事情,它也会让您的生活更轻松。
也回答 eoinoc 的问题并提供额外提示:
完成合并后,你的 git cli 会提示你写一条消息,通常会出现一条通用消息,说类似
将远程跟踪分支“用户/他们的分支”合并到您的分支中
确保编辑该消息并包含对拉取请求编号的引用。那是: (假设拉取请求编号为 123)
将远程跟踪分支“用户/他们的分支”合并到您的分支中
refs #123 解决任何问题...
因此,下次您访问您的 github 问题/拉取请求页面并检查该特定拉取请求时,您将看到您的消息,其中包含提交您进行合并的链接的链接。
这是我的意思的截图。
【讨论】:
为此,请转到存储库的主页,单击分支,然后将默认分支从 master 更改为其他分支,在我的情况下为“dev”。
之后,每当有人创建拉取请求时,merge 按钮会自动将该请求合并到“dev”而不是 master。
【讨论】: