拉取请求vs合并请求

拉取请求和合并请求有什么区别?

例如,在GitHub中,它是一个拉取请求,而在GitLab中,它是一个合并请求。那么,这两者之间有区别吗?

335132 次浏览

它们是相同的特征

合并或拉取请求是在git管理应用程序中创建的,并要求分配的人合并两个分支。GitHub和Bit的工具选择名称拉取请求,因为第一个手动操作是拉取功能分支。GitLab和Git的工具选择名称合并请求,因为这是受让人请求的最后一个操作。在本文中,我们将它们称为合并请求。

--https://about.gitlab.com/2014/09/29/gitlab-flow/

GitLab的合并请求功能相当于GitHub的拉取请求功能。两者都是将更改从另一个分支或分叉拉入您的分支并将更改与您现有的代码合并的手段。它们是代码审查和更改管理的有用工具。

文章来自GitLab讨论了命名功能的差异:

合并或拉取请求是在git管理应用程序中创建的,并要求分配的人合并两个分支。GitHub和Bit的工具选择名称拉取请求,因为第一个手动操作是拉取功能分支。GitLab和Git的工具选择名称合并请求,因为这是受让人请求的最后一个操作。在本文中,我们将它们称为合并请求。

“合并请求”不应与git merge命令混淆。“拉取请求”也不应与git pull命令混淆。git命令都在拉取请求和合并请求的幕后使用,但是合并/拉取请求涉及的主题比这两个命令要广泛得多。

在我看来,它们意味着相同的活动,但从不同的角度来看:

想想看,Alice对存储库A进行了一些提交,该存储库是从Bob的存储库B分叉的。

当Alice想要将她的更改“合并”到B中时,她实际上希望Bob从A中“拉取”这些更改。

因此,从Alice的角度来看,这是一个“合并请求”,而Bob将其视为“拉取请求”。

GitLab 12.1(2019年7月)引入了一个区别:

"合并机密问题的请求"

在讨论、规划和解决安全漏洞等机密问题时,由于Git存储库是公共的,因此开源项目保持高效可能特别具有挑战性。

https://about.gitlab.com/images/12_1/mr-confidential.png

从12.1开始,现在可以使用创建机密合并请求按钮在简化的工作流程中解决公共项目中的机密问题,该按钮可帮助您在项目的私有分支中创建合并请求。

请参阅问题58583中的“机密问题”。

GitHub中存在类似的功能,但涉及创建一个名为“维护者安全公告”的特殊私有分叉。


GitLab 13.5(2020年10月)将添加审核人,这是 已经可用于GitHub之前。

如前所述,两者的目的几乎相同。就我个人而言,我喜欢git rebase和合并请求(如在gitlab中)。它减轻了审查者/维护者的负担,确保在添加合并请求时,功能分支包括创建功能分支后在主分支上完成的所有最新提交。这是一篇非常有用的文章,详细解释了rebase: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

在冲突管理方面存在细微差别。在冲突的情况下,Github中的拉取请求将导致目的地分支上的合并提交。在Gitlab中,当发现冲突时,所做的修改将在来源分支上的合并提交上。

查看https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.html

"GitLab通过在源代码中创建合并提交来解决冲突 不自动合并到目标分支的分支。这 允许在更改之前审查和测试合并提交 合并,防止意外更改进入目标分支 没有审查或破坏构建。”