当前位置: 首页 > article >正文

软件开发中的 Pull Request 工作流:逐步指南


简介
在软件开发中,Pull Request(PR)是开发者向项目主代码库提交代码更改请求的过程。这种方式促进了代码审查、协作和反馈。在本文中,我们将详细介绍一个典型的 Pull Request 工作流,并解释其命名的原因。


1. 创建分支

在开始新功能开发或修复 bug 之前,您需要从主代码库(通常是 mainmaster)创建一个新分支。这样做可以将您的更改与主代码库隔离,便于管理和追踪。

# 从主分支创建新分支
git checkout -b feature/your-feature-name

2. 开发和提交代码

在新分支上进行开发工作。完成更改后,使用 git addgit commit 将更改提交到本地版本库。

# 添加修改的文件
git add .

# 提交代码并附上描述性信息
git commit -m "Add new feature"

3. 推送分支到远程仓库

在本地提交代码后,需要将分支推送到远程仓库,如 GitHub。这样做是为了让其他团队成员可以访问您的更改并进行审查。

# 将分支推送到远程仓库
git push origin feature/your-feature-name

4. 创建 Pull Request

推送新分支后,您可以使用 GitHub CLI (gh) 工具创建 Pull Request。这样可以直接从命令行完成 PR 的创建,简化流程。

# 创建 Pull Request
gh pr create --title "Add new feature" --body "详细说明更改的目的和背景" --base main

在创建 PR 时,您可以指定标题和描述,并关联相关的 Issue(如:Closes #123)。

Pull Request 命名的原因

“Pull Request”得名于请求项目维护者(审核者)将您的更改从您的分支“拉取”(Pull)到主分支中。这个过程是一个请求,因为合并需要经过代码审查和批准。

5. 代码审查

提交 Pull Request 后,其他开发者会对您的代码进行审查。审查过程包括:

  • 提出建议或优化点。
  • 指出可能的错误或问题。
  • 讨论实现方法或设计考虑。

如果需要更改,您可以在本地修改代码,提交并推送更新。Pull Request 会自动包含这些更新。

# 根据反馈进行修改后再次提交
git add .
git commit -m "Fix code review issues"
git push origin feature/your-feature-name

6. 通过和合并

代码审查通过后,项目维护者或有权限的人会将您的分支合并到主分支。在 GitHub 中,您可以选择不同的合并策略:

  • Merge Commit:保留所有提交历史,创建一个合并提交。
  • Squash and Merge:将所有提交压缩为一个提交,保持主分支整洁。

7. 删除分支

合并后,您可以删除不再需要的功能分支。

# 删除本地分支
git branch -d feature/your-feature-name

# 删除远程分支
git push origin --delete feature/your-feature-name

8. 本地同步主分支

最后,切换回主分支并拉取最新的代码,保持本地仓库的更新。

# 切换回主分支
git checkout main

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

Pull Request 工作流程图

以下是一个简单的 ASCII 流程图描述 Pull Request 工作流:

+-------------------+     Git Branch 状态:
|   创建新分支      |       main
|   git checkout -b |        \
+---------+---------+         \-- feature/your-feature-name
          |                  
          v                  
+-------------------+    Git Branch 状态:
|   开发和提交代码  |       main
|   git add, commit |        \
+---------+---------+         \-- feature/your-feature-name*
          |                                    (committed changes)
          v                  
+-------------------+     Git Branch 状态:
|   推送到远程仓库  |       main
|   git push origin |        \
+---------+---------+         \-- feature/your-feature-name*
          |                                    (pushed changes)
          v                  
+-------------------+     Git Branch 状态:
| 创建 Pull Request |       main
|   gh pr create    |        \
+---------+---------+         \-- feature/your-feature-name*
          |                                    (PR created)
          v                  
+-------------------+     Git Branch 状态:
|   代码审查        |       main
|   修改后推送更新  |          \
+---------+---------+         \-- feature/your-feature-name*
          |                                    (reviewed and updated)
          v                  
+-------------------+     Git Branch 状态:
|   合并到主分支    |       main (merged)
+---------+---------+        \
          |                   \-- feature/your-feature-name
          v                 
+-------------------+     Git Branch 状态:
|   删除分支        |       main
|   git branch -d   |       
+---------+---------+       
          |                  
          v                  
+-------------------+     Git Branch 状态:
|   同步主分支      |       main*
|   git checkout,   |       
|   git pull        |       
+-------------------+

通过这个工作流,团队成员可以高效协作开发,并确保代码在合并到主分支之前得到充分的审查和讨论。GitHub CLI 工具进一步简化了命令行环境下的操作,使得整个流程更加流畅。


http://www.kler.cn/a/393249.html

相关文章:

  • DataWorks on EMR StarRocks,打造标准湖仓新范式
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • [Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比
  • spring中r类是什么
  • 自动驾驶3D目标检测综述(一)
  • springboot读取modbus数据
  • 《AI 使生活更美好》
  • 【go从零单排】gin+gorm理解及实现CRUD
  • 机器学习系列----KNN分类
  • 【Linux网络】Linux网络编程套接字,UDP与TCP
  • PCB安全电气间距
  • Python网络爬虫与数据采集实战——网络协议与HTTP
  • linux命令详解,存储管理相关
  • 排序算法 -堆排序
  • SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间
  • 学Linux的第八天
  • 数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)
  • uniapp 上传 base64 图片
  • ubuntu22.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)
  • 【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
  • 除了 Postman,还有什么好用的 API 测试工具吗
  • uni-app中使用 unicloud 云开发平台③
  • C++生成随机数
  • 信用租赁系统的灵活配置与智能化管理助力租赁市场发展
  • 29系统备份与恢复