Skip to content

Pull Request

概述

Pull Request(PR)是现代 Git 协作的核心机制,它允许开发者提议将代码变更合并到主分支。通过 PR,团队可以进行代码审查、讨论和自动化测试,确保代码质量。

什么是 PR

PR 的定义

Pull Request 是一种请求,请求将一个分支的变更合并到另一个分支。它包含:

  • 代码变更:具体的文件修改
  • 讨论:团队成员的评论和反馈
  • 状态:审核状态、CI 状态
  • 元数据:标签、里程碑、指派人员

PR 与 Merge Request

  • Pull Request:GitHub、Bitbucket 使用
  • Merge Request:GitLab 使用

两者功能相似,只是名称不同。

PR 的作用

  • 代码审查:团队成员审核代码质量
  • 知识共享:传播代码变更信息
  • 质量保证:结合 CI/CD 进行自动化测试
  • 历史记录:记录决策过程和讨论

创建 PR

准备工作

1. 创建功能分支

bash
git checkout main
git pull origin main
git checkout -b feature/user-auth

2. 开发并提交

bash
git add .
git commit -m "feat: implement user authentication"

3. 推送分支

bash
git push origin feature/user-auth

在 GitHub 创建 PR

方法一:通过网页界面

  1. 访问仓库页面
  2. 点击 "Compare & pull request" 按钮
  3. 选择源分支和目标分支
  4. 填写 PR 标题和描述
  5. 点击 "Create pull request"

方法二:使用 GitHub CLI

bash
gh pr create --title "Add user authentication" --body "Implement user authentication feature"

PR 标题和描述

标题规范

feat: add user authentication
fix: resolve login timeout issue
refactor: restructure auth module

描述模板

markdown
## 变更描述
实现用户认证功能,包括登录、注册和密码重置。

## 变更类型
- [x] 新功能
- [ ] Bug 修复
- [ ] 重构
- [ ] 文档更新

## 测试
- [x] 已添加单元测试
- [x] 已进行手动测试

## 截图
![登录界面](screenshot.png)

## 相关 Issue
Closes #123

从 Fork 创建 PR

bash
git remote add upstream git@github.com:original/repo.git
git fetch upstream
git checkout -b feature/new-feature
git push origin feature/new-feature

在 GitHub 上创建从 your-username:feature/new-featureoriginal:main 的 PR。

PR 审核流程

审核角色

  • 作者:创建 PR 的开发者
  • 审核者:审查代码的团队成员
  • 维护者:有权合并 PR 的人员

审核状态

状态说明
Review required等待审核
Changes requested需要修改
Approved审核通过
Merged已合并
Closed已关闭

代码审核

审核者操作

  1. 打开 PR 页面
  2. 点击 "Files changed"
  3. 查看代码变更
  4. 添加行内评论
  5. 提交审核意见

审核选项

  • Comment:仅评论,不改变状态
  • Approve:批准合并
  • Request changes:要求修改

添加评论

行内评论

在代码行上添加评论:

markdown
建议使用常量替代魔法数字

整体评论

在 Conversation 标签页添加总体评论。

响应审核反馈

1. 根据反馈修改代码

bash
git add .
git commit -m "refactor: address review feedback"
git push origin feature/user-auth

2. 回复评论

在评论下方回复说明修改情况。

3. 请求重新审核

修改完成后,请求审核者重新审核。

CI/CD 检查

PR 通常会触发 CI/CD 流程:

  • 运行单元测试
  • 代码风格检查
  • 安全扫描
  • 构建验证

确保所有检查通过:

bash
gh pr checks

合并 PR

合并条件

  • 所有审核者批准
  • CI/CD 检查通过
  • 没有合并冲突
  • 符合分支保护规则

合并方式

1. Create a merge commit

创建一个合并提交:

bash
git merge --no-ff feature/user-auth

2. Squash and merge

压缩所有提交为一个:

bash
git merge --squash feature/user-auth
git commit -m "feat: add user authentication (#123)"

3. Rebase and merge

变基后快进合并:

bash
git rebase feature/user-auth
git merge feature/user-auth

通过网页合并

  1. 点击 "Merge pull request"
  2. 选择合并方式
  3. 确认合并信息
  4. 点击 "Confirm merge"

通过命令行合并

bash
git checkout main
git pull origin main
git merge feature/user-auth
git push origin main

通过 GitHub CLI 合并

bash
gh pr merge 123 --merge
gh pr merge 123 --squash
gh pr merge 123 --rebase

合并后清理

bash
git branch -d feature/user-auth
git push origin --delete feature/user-auth

PR 最佳实践

小而专注的 PR

  • 每个 PR 只做一件事
  • 控制变更文件数量
  • 便于审查和理解

清晰的描述

markdown
## 目标
实现用户登录功能

## 变更内容
- 添加登录页面
- 实现认证逻辑
- 添加单元测试

## 测试方法
1. 访问 /login
2. 输入用户名和密码
3. 点击登录按钮

及时响应

  • 快速回复审核评论
  • 及时修改代码
  • 保持 PR 活跃

保持分支更新

bash
git fetch origin
git rebase origin/main
git push origin feature/user-auth --force-with-lease

使用 WIP 标记

对于未完成的 PR:

[WIP] Add user authentication

或使用 GitHub 的 Draft PR 功能。

常见问题

解决合并冲突

bash
git fetch origin
git checkout main
git pull origin main
git checkout feature/user-auth
git rebase origin/main

git add .
git rebase --continue

git push origin feature/user-auth --force-with-lease

关闭 PR

bash
gh pr close 123

重新打开 PR

bash
gh pr reopen 123

查看 PR 状态

bash
gh pr view 123
gh pr status

列出所有 PR

bash
gh pr list
gh pr list --state open
gh pr list --author username

总结

  • PR 是代码审查和协作的核心工具
  • 创建 PR 前确保代码已推送
  • 编写清晰的标题和描述
  • 积极参与代码审核
  • 选择合适的合并方式
  • 合并后及时清理分支