一个拉取请求进入我托管在 Github 上的 repo。默认情况下,它被合并到master
分支中。
我有什么办法可以更改更改将合并到哪个分支?
自 15.08.2016 起, GitHub 允许通过 GUI 更改拉取请求的目标分支。单击Edit
标题旁边的,然后从下拉列表中选择分支。
您现在可以更改打开的拉取请求的基本分支。创建拉取请求后,您可以修改基础分支,以便将拉取请求中的更改与不同的分支进行比较。通过更改原始拉取请求的基础分支而不是使用正确的基础分支打开新分支,您将能够保留有价值的工作和讨论。
提交者可以在他们发出拉取请求时更改它,但是一旦他们发出它,您就无法更改它。
另一方面,您可以手动合并他们的分支并推送,我通常会为错误定位的拉取请求执行此操作。
您可能会发现hub
gem有助于处理拉取请求的组件。
该 gem 包含了手动过程,即:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
使用其他答案提到的集线器 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/*
这样做是允许您下载所有拉取请求。由于大型存储库可能不希望这样做,因此 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。