拉请求与合并请求

时间:2014-03-05 13:39:17

标签: git github gitlab

Pull请求和合并请求之间有什么区别。

在Github中,它是一个Pull Request,例如,在GitLab中,它是一个合并请求......两者之间是否存在差异?

6 个答案:

答案 0 :(得分:577)

GitLab的"merge request"功能相当于GitHub的"pull request"功能。两者都是将更改从另一个分支或分支拉入分支并将更改与现有代码合并的方法。它们是代码审查和变更管理的有用工具。

article from GitLab讨论了命名功能的不同之处:

  

在git管理应用程序中创建合并或拉取请求,并要求指定人员合并两个分支。 GitHub和Bitbucket等工具选择名称拉取请求,因为第一个手动操作是拉动功能分支。诸如GitLab和Gitorious之类的工具选择名称合并请求,因为这是受让人请求的最终操作。在本文中,我们将它们称为合并请求。

A"合并请求"不应该与git merge命令混淆。也不应该提出"拉取请求"与git pull命令混淆。在拉请求和合并请求中,两个git命令都在幕后使用,但合并/拉取请求引用的主题比这两个命令要广泛得多。

答案 1 :(得分:42)

它们是相同的功能

  

在git管理应用程序中创建合并或拉取请求,并要求指定人员合并两个分支。 GitHub和Bitbucket等工具选择名称拉取请求,因为第一个手动操作是拉动功能分支。诸如GitLab和Gitorious之类的工具选择名称合并请求,因为这是受让人请求的最终操作。在本文中,我们将它们称为合并请求。

     

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

答案 2 :(得分:8)

在冲突管理方面存在细微的差异。如果发生冲突,在Github中的拉取请求将导致在目的地分支上进行合并提交。在Gitlab中,当发现冲突时,所做的修改将在 source 分支上的合并提交中进行。

请参见https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.html

“ GitLab通过在源代码中创建合并提交来解决冲突 分支不会自动合并到目标分支中。这个 允许在更改之前检查并测试合并​​提交 被合并,防止意外更改进入目标分支 无需审查或破坏构建。”

答案 3 :(得分:2)

在我看来,它们表示相同的活动,但具有不同的视角:

考虑到这一点,Alice对存储库A进行了一些提交,该存储库是从Bob的存储库B派生的。

当爱丽丝想将她的更改“合并”到B时,她实际上希望鲍勃从“拉”这些更改。

因此,从爱丽丝的角度来看,这是一个“合并请求”,而鲍勃则将其视为“拉动请求”。

答案 4 :(得分:0)

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

Merge Requests for Confidential Issues

  

在讨论,计划和解决诸如安全漏洞之类的机密问题时,由于Git存储库是公共的,因此开源项目要保持效率尤其具有挑战性。

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

  

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

请参见Confidential issues中的“ issue 58583”。

GitHub中存在类似的功能,但涉及创建一个特殊的私有fork,称为“ maintainer security advisory ”。

答案 5 :(得分:0)

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