Pull请求和Merge请求的区别是什么?

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


当前回答

GitLab的“合并请求”功能相当于GitHub的“拉请求”功能。这两种方法都是将更改从另一个分支或分支拉到您的分支中,并将更改与现有代码合并。它们是代码评审和变更管理的有用工具。

GitLab的一篇文章讨论了命名特性的区别:

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

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

其他回答

GitLab的“合并请求”功能相当于GitHub的“拉请求”功能。这两种方法都是将更改从另一个分支或分支拉到您的分支中,并将更改与现有代码合并。它们是代码评审和变更管理的有用工具。

GitLab的一篇文章讨论了命名特性的区别:

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

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

在冲突管理方面有微妙的区别。在冲突的情况下,Github中的拉请求将导致在目标分支上的合并提交。在Gitlab中,当发现冲突时,所做的修改将在源分支的合并提交中进行。

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

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

它们是相同的特征

合并或拉取请求是在git管理应用程序中创建的,并要求指定的人员合并两个分支。GitHub和Bitbucket等工具选择了拉请求的名称,因为第一个手动操作将是拉功能分支。像GitLab和Gitorious这样的工具选择名称合并请求,因为这是向受让人请求的最终操作。在本文中,我们将它们称为合并请求。 ——https://about.gitlab.com/2014/09/29/gitlab-flow/

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

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

想想看,Alice在存储库A上进行了一些提交,而存储库A是从Bob的存储库B派生出来的。

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

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