变基后手动合并的拉取请求在 Github 上不会显示为已合并

Pull requests merged manually after a rebase don't show as merged on Github

提问人:mandark 提问时间:1/2/2015 最后编辑:mandark 更新时间:8/8/2016 访问量:1893

问:

为了保持线性历史记录,我使用以下方法来合并更改,而不是依赖 github 的合并功能:

git checkout -b feature_x user/feature_x
git rebase master                           
git checkout master
git merge --no-ff feature_x
git push origin master                       # On Github: PR gets merged and closed
git branch -D feature_x

以上工作得很好,但是在我必须手动解决冲突的情况下,PR 不会自动在 Github 上显示为合并,我必须手动关闭 PR。

有没有更好的方法来合并拉取请求,自动显示合并和关闭的 Github PR?

git github merge 命令行界面 变基

评论

0赞 Gordon 7/1/2016
我认为是变基,而不是冲突,导致 GitHub 无法识别拉取请求是否已合并。
0赞 mandark 7/2/2016
@Gordon 你是对的。重新定位分支会创建一组不同的提交,这与原始提交集无关,并且 github 无法检测到新提交是否与同一拉取请求相关。

答:

1赞 onlythefinestwilldo 1/2/2015 #1

由于该功能是变基的,因此其提交历史记录完全被抵消。在这一点上,它基本上是一个新分支。

您可以强制推送变基功能分支,覆盖拉取请求(假设您是维护者并且您对 fork 具有写入权限)。

$ git push -f [feature] [remote] [feature]

GitHub 获取新主节点后,拉取请求将被关闭。

评论

0赞 mandark 1/4/2015
就像你说的,这需要对分叉的写入权限,这是一个不同的场景。此外,更改本地历史记录是可以的,但不建议更改公共历史记录,特别是当它可能影响另一个用户时,在这种情况下,该用户将是拉取请求的创建者。
3赞 mandark 6/26/2015 #2

正如 onlythefinestwilldo 正确指出的那样,一旦一个分支被重新定位,它就会包含一组不同的提交,这意味着原始拉取请求不会受到影响。

为了克服这个问题,我们改变了我们的流程:现在,在将更改合并到 master 时,我们不会对分支进行变基。如果无法合并更改,则会要求拉取请求的创建者为其分支变基并更新拉取请求。虽然不方便,但这是确保拉取请求在合并时自动关闭的唯一方法。