Answers:
从2016年8月15日开始, GitHub允许通过GUI更改拉取请求的目标分支。单击Edit
标题旁边的,然后从下拉列表中选择分支。
现在,您可以更改打开的拉取请求的基础分支。创建拉取请求后,您可以修改基础分支,以便将拉取请求中的更改与另一个分支进行比较。通过更改原始拉取请求的基础分支,而不是使用正确的基础分支打开一个新分支,您将能够保留宝贵的工作和讨论。
提交者可以在发出拉取请求时进行更改,但是一旦发出,您就无法更改。
另一方面,您可以手动合并它们的分支和推送,对于定向错误的拉取请求,我会半定期执行。
您可能会发现hub
gem在处理请求请求的组件方面很有帮助。
该gem包含了手动过程,即:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
@GuillermoMansilla在他的答案中提到的方法。
使用其他答案提到的hub gem的一种替代方法是使用命令行合并本地的pull request,这允许您执行以下操作:
$ 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)
将远程跟踪分支“用户/他们的分支”合并到您的分支中
裁判#123解决任何问题...
因此,下次您访问github issues / pull-requests页面并检查特定的拉取请求时,您将看到您的消息,其中包含用于提交合并位置的链接。
这是我的意思的屏幕截图。