ShopTRAINING/新需求开发流程.md

156 lines
6.3 KiB
Markdown
Raw Normal View History

2025-07-18 10:09:04 +08:00
# 新需求开发标准流程
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
本文档旨在提供一个标准、安全、高效的新功能开发工作流,涵盖从创建功能分支到最终合并回主开发分支的完整步骤,并融入日常开发的最佳实践。
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
## 核心开发理念
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
- **主分支保护**: `lyf-dev` 是团队的主开发分支,应始终保持稳定和可部署状态。所有新功能开发都必须在独立的功能分支中进行。
- **功能分支**: 每个新需求(如 `req0001`)都对应一个功能分支(如 `lyf-dev-req0001`)。分支命名应清晰、有意义。
- **小步快跑**: 频繁提交Commit、频繁推送Push、频繁与主线同步`rebase``merge`)。这能有效减少后期合并的难度和风险。
- **清晰的历史**: 保持 Git 提交历史的可读性方便代码审查Code Review和问题追溯。
2025-07-15 12:00:59 +08:00
---
2025-07-18 10:09:04 +08:00
## 每日工作第一步:同步最新代码
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
**无论你昨天工作到哪里,每天开始新一天的工作时,请务必执行以下步骤。这是保证团队高效协作、避免合并冲突的基石。**
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
1. **更新主开发分支 `lyf-dev`**
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# 切换到主开发分支
git checkout lyf-dev
# 从远程拉取最新代码,--prune 会清理远程已删除的分支引用
git pull origin lyf-dev --prune
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
2. **同步你的功能分支 (团队选择一种方案)**
将主分支的最新代码同步到你的功能分支,有两种主流方案,请团队根据偏好选择其一。
---
### 方案一 (推荐): 使用 `rebase` 保持历史清爽
此方案会让你的分支提交历史保持为一条直线,非常清晰。
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# 切换回你正在开发的功能分支(例如 lyf-dev-req0001
2025-07-15 12:00:59 +08:00
git checkout lyf-dev-req0001
2025-07-18 10:09:04 +08:00
# 使用 rebase 将 lyf-dev 的最新更新同步到你的分支
git rebase lyf-dev
```
- **优点**: 最终的提交历史非常干净、线性,便于代码审查和问题追溯。
- **缺点**: 重写了提交历史,需要使用 `git push --force-with-lease` 强制推送。
- **冲突解决**:
1. 手动修改冲突文件。
2. 执行 `git add <冲突文件>`
3. 执行 `git rebase --continue`
4. 若想中止,执行 `git rebase --abort`
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
---
### 方案二: 使用 `merge` 保留完整历史
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
此方案会忠实记录每一次合并操作,不修改历史提交。
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# 切换回你正在开发的功能分支(例如 lyf-dev-req0001
git checkout lyf-dev-req0001
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
# 将最新的 lyf-dev 合并到你当前的分支
git merge lyf-dev
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
- **优点**: 操作安全,不修改历史,推送时无需强制。
- **缺点**: 会在功能分支中产生额外的合并提交记录 (e.g., "Merge branch 'lyf-dev' into ..."),使历史记录变得复杂。
- **冲突解决**:
1. 手动修改冲突文件。
2. 执行 `git add <冲突文件>`
3. 执行 `git commit` 完成合并。
---
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
## 完整开发流程
### 1. 开始新需求:创建功能分支
**当你需要开启一个全新的功能开发时:**
1. **确保 `lyf-dev` 已是最新**
(此步骤已在“每日工作第一步”中完成,此处作为提醒)
2. **从 `lyf-dev` 创建并切换到新分支**
假设新需求编号是 `req0002`
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# 这会从最新的 lyf-dev 创建 lyf-dev-req0002 分支并切换过去
git checkout -b lyf-dev-req0002
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
### 2. 日常开发:提交与推送
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
**在你的功能分支上(如 `lyf-dev-req0002`)进行开发:**
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
1. **编码与本地提交**
完成一个小的、完整的功能点后,就进行一次提交。
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# 查看修改状态
git status
# 添加所有相关文件到暂存区
git add .
# 提交并撰写清晰的说明feat: 功能, fix: 修复, docs: 文档等)
git commit -m "feat: 实现用户认证模块"
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
2. **推送改动到远程备份**
为了代码安全和方便团队协作,应频繁将本地提交推送到远程。
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# -u 参数会设置本地分支跟踪远程分支,后续只需 git push 即可
git push -u origin lyf-dev-req0002
```
### 3. 功能完成:合并回主线
**当功能开发完成并通过测试后,将其合并回 `lyf-dev`**
1. **最后一次同步**
在正式合并前,做最后一次同步,确保分支包含了 `lyf-dev` 的所有最新内容。
(重复“每日工作第一步”中的同步流程)
2. **切换到主分支并拉取最新代码**
```bash
git checkout lyf-dev
2025-07-15 12:00:59 +08:00
git pull origin lyf-dev
```
2025-07-18 10:09:04 +08:00
3. **合并功能分支**
我们使用 `--no-ff` (No Fast-forward) 参数来创建合并提交,这样可以清晰地记录“合并了一个功能”这个行为。
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
# --no-ff 会创建一个新的合并提交,保留分支历史
git merge --no-ff lyf-dev-req0002
2025-07-15 12:00:59 +08:00
```
2025-07-22 13:24:27 +08:00
**合并详解与后续操作:**
- **无冲突情况**: 执行上述命令后Git 会自动准备一个合并提交,并**打开一个文本编辑器**,里面包含了默认的提交信息(如 `Merge branch 'lyf-dev-req0002' into lyf-dev`)。你只需检查信息,然后保存并关闭编辑器,合并就完成了。在这个流程中,你**不需要**手动执行 `git add`,因为 Git 已经帮你把所有改动都暂存好了。
- **有冲突情况**:
1. Git 会提示你存在冲突,并暂停合并。
2. 你需要手动打开并编辑那些有冲突的文件,解决其中的 `<<<<<<<`, `=======`, `>>>>>>>` 标记。
3. **关键一步**: 每解决完一个文件的冲突,你都**必须**执行 `git add <文件名>` 来告诉 Git “这个文件我已解决完毕”。
4. 当所有冲突文件都 `add` 之后,你需要手动执行 `git commit` 来完成合并。此时 Git 同样会打开编辑器让你确认提交信息。
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
4. **推送合并后的主分支**
2025-07-15 12:00:59 +08:00
```bash
git push origin lyf-dev
```
2025-07-18 10:09:04 +08:00
### 4. 清理工作
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
**合并完成后,功能分支的历史使命就完成了:**
2025-07-15 12:00:59 +08:00
2025-07-18 10:09:04 +08:00
1. **删除远程分支**
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
git push origin --delete lyf-dev-req0002
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
2. **删除本地分支**
2025-07-15 12:00:59 +08:00
```bash
2025-07-18 10:09:04 +08:00
git branch -d lyf-dev-req0002
2025-07-15 12:00:59 +08:00
```
2025-07-18 10:09:04 +08:00
遵循以上流程,可以确保团队的开发工作流清晰、安全且高效。