Pull 请求和 Merge 请求有什么区别?
在 GitHub 中,它是一个 Pull 请求,而在 GitLab 中,它是一个合并请求。那么,这两者有区别吗?
GitLab 的 “合并请求” 功能相当于 GitHub 的 “拉取请求” 功能。 两者都是将更改从另一个分支或分支拉入您的分支并将更改与现有代码合并的方法。它们是代码审查和变更管理的有用工具。
GitLab 的一篇文章讨论了命名功能的差异:
合并或拉取请求在 git 管理应用程序中创建,并要求指定人员合并两个分支。 GitHub 和 Bitbucket 等工具选择名称拉取请求,因为第一个手动操作是拉取功能分支。 GitLab 和 Gitorious 等工具选择名称合并请求,因为这是受让人请求的最终操作。在本文中,我们将它们称为合并请求。
git merge
命令混淆。 “拉取请求”也不应该与 git pull
命令混淆。 这两个 git
命令都在拉取请求和合并请求中在幕后使用,但是合并/拉取请求指的是比这两个命令更广泛的主题。
在我看来,它们意味着相同的活动,但从不同的角度来看:
想一想,Alice 在存储库 A 上进行了一些提交,该存储库是从 Bob 的存储库 B 分叉出来的。
当 Alice 想要将她的更改“合并”到 B 时,她实际上希望 Bob 从 A 中“拉取”这些更改。
因此,从Alice的角度来看,这是一个“合并请求”,而Bob则将其视为“拉取请求”。
它们是相同的功能
合并或拉取请求在 git 管理应用程序中创建,并要求指定人员合并两个分支。 GitHub 和 Bitbucket 等工具选择名称拉取请求,因为第一个手动操作是拉取功能分支。 GitLab 和 Gitorious 等工具选择名称合并请求,因为这是受让人请求的最终操作。在本文中,我们将它们称为合并请求。
冲突管理方面存在细微差别。如果发生冲突,Github 中的拉取请求将导致在 destination 分支上进行合并提交。在 Gitlab 中,当发现冲突时,所做的修改将在 source 分支上的合并提交上进行。
参见 https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.html
“GitLab 通过在源中创建合并提交来解决冲突 不会自动合并到目标分支的分支。这 允许在更改之前审查和测试合并提交 合并,防止意外更改进入目标分支 无需审查或破坏构建。”
GitLab 12.1(2019 年 7 月)引入了一个差异:
在讨论、规划和解决安全漏洞等机密问题时,由于 Git 存储库是公开的,因此开源项目保持高效尤其具有挑战性。
从 12.1 开始,现在可以使用“创建机密合并请求”按钮在简化的工作流程中解决公共项目中的机密问题,这有助于您在项目的私有分支中创建合并请求。
GitHub 中存在类似的功能,但涉及创建一个特殊的私有分支,称为“维护者安全咨询”。
GitLab 13.5(2020 年 10 月) 将添加 审阅者,这是 之前已经可用于 GitHub。
正如之前的答案中提到的,两者的目的几乎相同。就我个人而言,我喜欢 git rebase 和合并请求(如在 gitlab 中)。它减轻了审阅者/维护者的负担,确保在添加合并请求时,功能分支包含创建功能分支后在主分支上完成的所有最新提交。这是一篇非常有用的文章,详细解释了 rebase: https://git-scm.com/book/en/v2/Git-Branching-Rebasing