本文是我们 “高级 Git” 系列的一部分。请务必 关注我们的 Twitter 或 订阅我们的新闻稿 以了解下一篇文章的信息!
在本系列的第三篇文章中,我们将探讨 Pull Request —— 这是一项帮助大小开发团队的强大功能。Pull Request 不仅可以改善代码评审和反馈过程,还能帮助跟踪和讨论代码更改。最后但同样重要的是,Pull Request 是向您没有写入权限的其他仓库贡献代码的理想方式。
高级 Git 系列
- 第 1 部分: 创建完美的 Git 提交
- 第 2 部分: Git 分支策略
- 第 3 部分: 使用 Pull Request 提升协作 (您在此!)
- 第 4 部分: 合并冲突
- 第 5 部分: Rebase 与 Merge
- 第 6 部分: 交互式 Rebase
- 第 7 部分: Git 中的 Cherry-Picking 提交
- 第 8 部分: 使用 Reflog 恢复丢失的提交
什么是 Pull Request?
首先,重要的是要了解 Pull Request 不是 Git 的核心功能。相反,它们是由您使用的 Git 托管平台提供的:GitHub、GitLab、Bitbucket、AzureDevops 等等,它们都将此功能内置到其平台中。
为什么要创建 Pull Request?
在深入探讨如何创建完美的 Pull Request 之前,让我们先讨论一下 为什么要 使用此功能。
假设您刚刚完成软件的新功能。也许您一直在功能分支上工作,因此下一步就是将其合并到主干分支 (master 或 main) 中。在某些情况下这完全没问题,例如,如果项目中只有您一个开发人员,或者您经验丰富,并且确信团队成员会对此感到满意。
顺便说一下:如果您想了解更多关于分支和典型分支工作流程的信息,请查看我们“高级 Git”系列中的第二篇文章:“Git 分支策略。”

但是,如果您的更改比较复杂,您希望其他人查看您的工作呢?这就是 Pull Request 的用武之地。使用 Pull Request,您可以邀请其他人查看您的工作并提供反馈。

Pull Request 打开后,您可以与其他开发人员讨论您的代码。大多数 Git 托管平台允许其他用户在此过程中添加评论并建议更改。在您的审阅者批准您的工作后,它可能会被合并到另一个分支中。

然而,Pull Request 不仅仅是为了代码审查工作流程。如果您想向您没有写入权限的其他仓库贡献代码,它们也很有用。想想所有开源项目:如果您有新功能的想法,或者您想提交补丁,Pull Request 是一种很好的方法,可以展示您的想法,而无需加入项目并成为主要贡献者。
这将我们引入了与 Pull Request 密切相关的主题:Fork。
使用 Fork
一个 Fork 是您现有 Git 仓库的个人副本。回到我们的开源示例:第一步是创建原始仓库的 Fork。之后,您可以在自己的个人副本中更改代码。

完成之后,您将打开一个 Pull Request,请求原始仓库的所有者包含您的更改。所有者或其他主要贡献者之一可以查看您的代码,然后决定是否包含它(或不包含)。

重要说明: Pull Request 始终基于分支,而不是单个提交!创建 Pull Request 时,您将它基于某个分支,并请求将其包含进来。
让审阅者更容易:如何创建优秀的 Pull Request
如前所述,Pull Request 不是 Git 的核心功能。相反,每个 Git 平台都有自己的设计以及自己对 Pull Request 应该如何工作的想法。它们在 GitLab、GitHub、Bitbucket 等平台上看起来不同。每个平台在跟踪、讨论和审查更改方面都有略微不同的工作流程。

例如,桌面 GUI(如 Tower Git 客户端)可以简化此过程:无论您使用什么代码托管服务,它们都提供 一致 的用户界面。

话虽如此,总体工作流程始终相同,包括以下步骤:
- 如果您没有目标仓库的写入权限,第一步是创建一个 Fork,即您的个人仓库版本。
- 在您的 Forked 仓库中创建一个新的本地分支。(提醒:Pull Request 基于分支,而不是提交!)
- 在本地分支中进行一些更改,并提交它们。
- 将更改推送到您自己的远程仓库。
- 使用您的更改创建一个 Pull Request,并开始与他人讨论。
让我们看一下 Pull Request 本身以及如何创建一个让另一个开发人员更容易接受的 Pull Request。首先,它应该很短,以便可以快速审查。查看 3000 行代码比查看 30 行代码更难理解。
此外,请确保添加一个好的、可以自解释的标题和一个有意义的描述。尝试描述您 更改了哪些内容、为什么 打开了 Pull Request 以及 您的更改如何影响项目。大多数平台允许您添加截图,可以帮助演示更改。
批准、合并或拒绝?
一旦您的更改获得批准,您(或具有写入权限的人员)可以将 Forked 分支合并到主分支中。但是,如果审阅者不想以当前状态合并 Pull Request 怎么办?好吧,您始终可以添加新的提交,然后在推送该分支后,现有的 Pull Request 会更新。
或者,所有者或其他具有写入权限的人员可以在不想合并更改时拒绝 Pull Request。
开发人员的安全网
如您所见,Pull Request 是与 fellow 开发人员沟通和协作的好方法。通过要求其他人查看您的工作,您可以确保只有高质量的代码进入您的代码库。
如果您想深入了解高级 Git 工具,请随时查看我的(免费!) “高级 Git 工具包”:它包含关于分支策略、交互式 Rebase、Reflog、子模块等等主题的短视频合集。
高级 Git 系列
- 第 1 部分: 创建完美的 Git 提交
- 第 2 部分: Git 分支策略
- 第 3 部分: 使用 Pull Request 提升协作 (您在此!)
- 第 4 部分: 合并冲突
- 第 5 部分: Rebase 与 Merge
- 第 6 部分: 交互式 Rebase
- 第 7 部分: Git 中的 Cherry-Picking 提交
- 第 8 部分: 使用 Reflog 恢复丢失的提交