如何使收到的 GitHub 具有更改历史记录的 PR 可合并?

How to make a received GitHub PR with changed history ff-mergeable?

用户在 GitHub.

上在我的存储库中创建了一个 PR,其中包含一次提交

自 PR 以来,更改被推送到主存储库,因此无法快进合并。

TL;DR

我拉下了他的分支,重新设置了几次基址并推送到原点,所以 PR 提交现在有一个不同的哈希,GitHub PR 没有自动标记为拉入。


我在做一个主题分支,把他的master拿来了。

* 5977cb4 - (user/master) PR <user>
| * 857775e - (HEAD -> topic) topic commeit. <me>
| | * 871201e - (master) Local changes in master <me>
| |/  
| * f648f4e - (origin/master) Changes in origin <me>
|/  
* 3461bd2 - Initial commit <me>

然后重新基于他的 master 分支

➜  local git:(topic) git rebase user/master
First, rewinding head to replay your work on top of it...
Applying: Changes in origin
Applying: topic commeit.

* 1e2fe2e - (HEAD -> topic) topic commeit. <me>
* 1c7caa9 - Changes in origin <me>
* 5977cb4 - (user/master) PR <user>
| * 871201e - (master) Local changes in master <me>
| * f648f4e - (origin/master) Changes in origin <me>
|/  
* 3461bd2 - Initial commit <me>

然后根据我的 master 和 ff-merged 主题将其重新定位以推送到原点:

➜  local git:(topic) git rebase master
First, rewinding head to replay your work on top of it...
Applying: PR
Applying: topic commeit.

➜  local git:(topic) git checkout master
Switched to branch 'master'
➜  local git:(master) git merge topic
Updating 871201e..836e09d
Fast-forward

并将其推送到原点:

* 836e09d - (HEAD -> master, origin/master, topic) topic commeit. <me>
* 46e591a - PR <user>
* 871201e - Local changes in master <me>
* f648f4e - Changes in origin <me>
| * 5977cb4 - (user/master) PR <user>
|/  
* 3461bd2 - Initial commit <me>

到目前为止,PR 提交有一个不同的哈希,GitHub PR 没有选择它。

现在,我无法将其完全引入,因为我已经在历史记录中进行了提交更改,只是使用了不同的哈希值。

我希望 GitHub 将其标记为已合并,这样就不会显得我拒绝了更改。

我应该指示用户做什么,以便 PR 可以快进合并?他应该简单地拉我的主分支吗?以后应该怎么做才能更干净的处理这种情况?

Github 的合并请求永远不会以快进方式合并。这是设计使然,因此明确说明了谁批准 包含由陌生人编写的那些提交。

来自 GitHub 的帮助 Merging a pull request:

Pull requests are merged using the --no-ff option.

因此,您可以以一种 no-ff 方式合并 PR,或者 cherry-pick 提交并关闭 PR。在这两种情况下,作者身份都将完好无损,PR 中的 谢谢 消息比贡献者观点的 Merged 状态更有价值。

如果你决定合并 PR,你可以要求贡献者在当前 master 的基础上重新设置她的分支,这样历史不会有太大的差异,但可能不值得介绍工作流程的官僚作风。

保持干净的历史很好,但在某些情况下,干净的历史不是线性的 - 不要试图对其进行过度设计:)