Pull Request 到底是什么?一文看懂代码审查流程

预计阅读时间:9 分钟

很多刚进入团队开发的程序员,第一次听到 Pull Request,都会有点迷糊。

代码不是已经 git push 上去了吗?
为什么还要发 PR?
PR 是不是就是“提交代码”?
Reviewer 又到底在看什么?

一句话说清楚:

Pull Request 不是提交代码,而是请求团队审查并合并代码。

它真正解决的问题不是“代码怎么传上去”,而是“这段代码能不能进入主分支”。


PR 是什么?

Pull Request,简称 PR,中文常叫“拉取请求”或“合并请求”。

在 GitHub 里通常叫 Pull Request。
在 GitLab 里通常叫 Merge Request。
名字不同,本质很接近。

它表达的是:

我在 feature 分支完成了一段代码,请团队帮我检查,确认没问题后合并到 main。

比如:

feature/login  --->  main

你不是直接把代码塞进 main,而是先发起一个请求。

团队成员会在这个请求里看到:

  • 你改了哪些文件
  • 每个文件改了什么
  • 提交记录是什么
  • 是否通过自动化测试
  • 是否有人审查通过
  • 是否存在冲突

所以,PR 是代码进入主分支前的一道门。


为什么不能直接合并?

如果每个人都能直接 push 到 main,短期看很快,长期一定出问题。

常见风险包括:

  • 半成品功能进入主分支
  • Bug 没人发现
  • 同事代码被覆盖
  • 测试没跑就上线
  • 需求理解偏差没人纠正
  • 安全问题直接混进生产代码

PR 的价值,就是把“个人提交”变成“团队确认”。

一个成熟团队通常会要求:

  • 必须走 PR
  • 至少一人 Review
  • CI 测试通过
  • 无冲突
  • 符合代码规范
  • 关键模块需要负责人审批

这不是形式主义,而是降低风险。

软件开发流程图解析


一个标准 PR 流程

假设你要开发登录功能。

你通常会这样做:

git checkout main
git pull origin main
git checkout -b feature/login

开发完成后提交:

git add .
git commit -m "feat(login): add sms login"
git push origin feature/login

然后在 GitHub、GitLab 或 Gitee 上发起 PR:

feature/login -> main

接下来会进入审查流程:

提交代码
-> 发起 PR
-> 自动化测试
-> Code Review
-> 修改反馈
-> 再次提交
-> 审查通过
-> 合并 main

注意:PR 不是一次性动作。

Reviewer 提意见后,你可以继续在 feature/login 分支上提交代码。PR 页面会自动更新。

这也是 PR 很方便的地方:所有讨论、修改、测试结果都集中在同一个地方。


Reviewer 到底在看什么?

很多新人以为 Reviewer 只是看看代码有没有语法错误。

其实不是。

真正的 Code Review 会关注很多层面:

  1. 需求是否实现对了

代码有没有解决真正的问题?有没有理解偏需求?

  1. 逻辑是否可靠

边界条件、异常情况、空值、并发、权限有没有处理?

  1. 代码是否可维护

命名是否清楚?结构是否合理?有没有过度复杂?

  1. 是否影响其他模块

改登录功能,会不会影响注册、鉴权、用户信息接口?

  1. 是否有安全风险

有没有泄露 Token?有没有权限绕过?有没有敏感数据打印?

  1. 测试是否足够

有没有补测试?关键路径有没有覆盖?

所以,PR 审查不是挑刺,而是帮团队在代码进入主分支前多看一眼。

很多线上问题,其实在 PR 阶段就能被发现。


怎么写一个高质量 PR?

一个好的 PR,不应该只丢一堆代码给别人猜。

你需要把上下文说清楚。

推荐 PR 描述包含这些内容:

## 背景

本次 PR 增加手机号验证码登录功能。

## 改动内容

- 新增短信验证码登录接口
- 新增登录页面表单校验
- 增加 token 刷新逻辑
- 补充登录失败场景测试

## 验证方式

- pnpm test
- 手动测试手机号登录成功/失败场景

## 风险点

- token 刷新逻辑会影响现有登录态
- 需要关注验证码过期场景

这种 PR 会让 Reviewer 很舒服。

他不用从零猜你的意图,也能更快判断重点。

PR 写得越清楚,Review 越高效。


PR 太大,是最常见的问题

很多 PR 难 Review,不是因为代码差,而是太大。

一个 PR 里同时包含:

  • 新功能
  • 重构
  • 样式调整
  • 依赖升级
  • 顺手修 bug
  • 格式化全文件

Reviewer 会很痛苦。

更好的方式是拆小:

PR 1:新增登录 API
PR 2:新增登录页面
PR 3:补充登录测试
PR 4:重构鉴权工具函数

小 PR 的好处很明显:

  • 更容易理解
  • 更容易发现问题
  • 更容易回滚
  • 更容易快速合并
  • 冲突概率更低

记住一句话:

PR 不是越完整越好,而是越聚焦越好。


收到 Review 意见怎么办?

收到 Review 意见,不要本能防御。

Reviewer 不是在否定你,而是在帮代码变得更稳。

常见回复方式:

已修改,增加了空值判断。
这里我保留当前写法,是因为接口需要兼容旧版本。
这个建议有道理,我单独拆一个 PR 处理重构。

好的 PR 讨论应该围绕代码和需求,而不是情绪。

如果你不同意某条意见,也可以解释原因。
PR 本来就是协作场所,不是单向审批。


合并之后就结束了吗?

PR 合并到 main 后,还可以做几件事:

  1. 删除 feature 分支。
git branch -d feature/login

远程分支也可以在平台上删除。

  1. 确认 main 上 CI 正常。

  2. 如果涉及上线,继续观察日志和监控。

  3. 如果 PR 留下技术债,及时创建后续任务。

PR 合并不是终点,它只是代码进入主线的节点。

真正重要的是:合并后的代码是否稳定运行。


PR 命令速查

git checkout main
# 切换到主分支

git pull origin main
# 拉取最新主分支

git checkout -b feature/login
# 创建功能分支

git add .
# 添加修改

git commit -m "feat(login): add sms login"
# 提交代码

git push origin feature/login
# 推送功能分支到远程

git status
# 查看当前状态

git log --oneline
# 查看提交历史

git diff main
# 查看当前分支相对 main 的改动

结尾:PR 是团队协作的安全门

Pull Request 不是多余流程,也不只是代码提交按钮。

它真正做的是:让代码进入主分支之前,经过讨论、测试、审查和确认。

这篇文章可以总结成以下三点:

  1. PR 的本质是请求团队审查并合并代码,不等于简单提交代码。
  2. 高质量 PR 要说明背景、改动内容、验证方式和风险点。
  3. 小而聚焦的 PR,比巨大而混杂的 PR 更容易 Review,也更安全。

本文由 楸木 原创,转载请注明出处。

相关推荐

发现更多