新需求开发流程文档
This commit is contained in:
parent
54428c80ca
commit
c64343fe95
159
新需求开发流程.md
159
新需求开发流程.md
@ -1,101 +1,150 @@
|
||||
# 新需求开发流程
|
||||
# 新需求开发标准流程
|
||||
|
||||
本文档旨在提供一个标准、安全的新功能开发工作流,涵盖从创建功能分支到最终合并回主开发分支的完整步骤。
|
||||
本文档旨在提供一个标准、安全、高效的新功能开发工作流,涵盖从创建功能分支到最终合并回主开发分支的完整步骤,并融入日常开发的最佳实践。
|
||||
|
||||
## 核心流程
|
||||
## 核心开发理念
|
||||
|
||||
采用功能分支(Feature Branch)的工作模式,主要步骤如下:
|
||||
|
||||
1. **同步与切换**:将远程创建的新功能分支(如 `lyf-dev-req0001`)同步到本地并切换。
|
||||
2. **开发与提交**:在本地功能分支上进行开发,并频繁提交改动。
|
||||
3. **推送与备份**:将本地的改动推送到远程功能分支。
|
||||
4. **合并回主线**:当功能开发测试完成后,将其合并回主开发分支(如 `lyf-dev`)。
|
||||
5. **清理分支**:合并完成后,清理已完成使命的功能分支。
|
||||
- **主分支保护**: `lyf-dev` 是团队的主开发分支,应始终保持稳定和可部署状态。所有新功能开发都必须在独立的功能分支中进行。
|
||||
- **功能分支**: 每个新需求(如 `req0001`)都对应一个功能分支(如 `lyf-dev-req0001`)。分支命名应清晰、有意义。
|
||||
- **小步快跑**: 频繁提交(Commit)、频繁推送(Push)、频繁与主线同步(`rebase` 或 `merge`)。这能有效减少后期合并的难度和风险。
|
||||
- **清晰的历史**: 保持 Git 提交历史的可读性,方便代码审查(Code Review)和问题追溯。
|
||||
|
||||
---
|
||||
|
||||
## 详细命令使用步骤
|
||||
## 每日工作第一步:同步最新代码
|
||||
|
||||
### 步骤一:同步远程分支到本地
|
||||
**无论你昨天工作到哪里,每天开始新一天的工作时,请务必执行以下步骤。这是保证团队高效协作、避免合并冲突的基石。**
|
||||
|
||||
假设您的同事已经在远程仓库基于 `lyf-dev` 创建了 `lyf-dev-req0001` 分支。
|
||||
|
||||
1. **获取远程所有最新信息**:
|
||||
这个命令会把远程仓库的新分支信息下载到你的本地,但不会做任何修改。
|
||||
1. **更新主开发分支 `lyf-dev`**
|
||||
```bash
|
||||
git fetch origin
|
||||
# 切换到主开发分支
|
||||
git checkout lyf-dev
|
||||
|
||||
# 从远程拉取最新代码,--prune 会清理远程已删除的分支引用
|
||||
git pull origin lyf-dev --prune
|
||||
```
|
||||
|
||||
2. **创建并切换到本地功能分支**:
|
||||
这个命令会在本地创建一个名为 `lyf-dev-req0001` 的新分支,并自动设置它跟踪远程的 `origin/lyf-dev-req0001` 分支。
|
||||
2. **同步你的功能分支 (团队选择一种方案)**
|
||||
将主分支的最新代码同步到你的功能分支,有两种主流方案,请团队根据偏好选择其一。
|
||||
|
||||
---
|
||||
### 方案一 (推荐): 使用 `rebase` 保持历史清爽
|
||||
|
||||
此方案会让你的分支提交历史保持为一条直线,非常清晰。
|
||||
|
||||
```bash
|
||||
# 切换回你正在开发的功能分支(例如 lyf-dev-req0001)
|
||||
git checkout lyf-dev-req0001
|
||||
|
||||
# 使用 rebase 将 lyf-dev 的最新更新同步到你的分支
|
||||
git rebase lyf-dev
|
||||
```
|
||||
现在,您已经处于一个干净、独立的功能分支上,可以开始开发了。
|
||||
- **优点**: 最终的提交历史非常干净、线性,便于代码审查和问题追溯。
|
||||
- **缺点**: 重写了提交历史,需要使用 `git push --force-with-lease` 强制推送。
|
||||
- **冲突解决**:
|
||||
1. 手动修改冲突文件。
|
||||
2. 执行 `git add <冲突文件>`。
|
||||
3. 执行 `git rebase --continue`。
|
||||
4. 若想中止,执行 `git rebase --abort`。
|
||||
|
||||
### 步骤二:在功能分支上开发
|
||||
---
|
||||
### 方案二: 使用 `merge` 保留完整历史
|
||||
|
||||
在这个分支上进行的所有修改都与 `lyf-dev` 无关,可以放心操作。
|
||||
此方案会忠实记录每一次合并操作,不修改历史提交。
|
||||
|
||||
1. **修改代码**:根据需求添加、修改文件。
|
||||
|
||||
2. **提交改动**:
|
||||
建议小步快跑,完成一个小的功能点就提交一次。
|
||||
```bash
|
||||
# 将所有修改添加到暂存区
|
||||
# 切换回你正在开发的功能分支(例如 lyf-dev-req0001)
|
||||
git checkout lyf-dev-req0001
|
||||
|
||||
# 将最新的 lyf-dev 合并到你当前的分支
|
||||
git merge lyf-dev
|
||||
```
|
||||
- **优点**: 操作安全,不修改历史,推送时无需强制。
|
||||
- **缺点**: 会在功能分支中产生额外的合并提交记录 (e.g., "Merge branch 'lyf-dev' into ..."),使历史记录变得复杂。
|
||||
- **冲突解决**:
|
||||
1. 手动修改冲突文件。
|
||||
2. 执行 `git add <冲突文件>`。
|
||||
3. 执行 `git commit` 完成合并。
|
||||
|
||||
---
|
||||
|
||||
## 完整开发流程
|
||||
|
||||
### 1. 开始新需求:创建功能分支
|
||||
|
||||
**当你需要开启一个全新的功能开发时:**
|
||||
|
||||
1. **确保 `lyf-dev` 已是最新**
|
||||
(此步骤已在“每日工作第一步”中完成,此处作为提醒)
|
||||
|
||||
2. **从 `lyf-dev` 创建并切换到新分支**
|
||||
假设新需求编号是 `req0002`:
|
||||
```bash
|
||||
# 这会从最新的 lyf-dev 创建 lyf-dev-req0002 分支并切换过去
|
||||
git checkout -b lyf-dev-req0002
|
||||
```
|
||||
|
||||
### 2. 日常开发:提交与推送
|
||||
|
||||
**在你的功能分支上(如 `lyf-dev-req0002`)进行开发:**
|
||||
|
||||
1. **编码与本地提交**
|
||||
完成一个小的、完整的功能点后,就进行一次提交。
|
||||
```bash
|
||||
# 查看修改状态
|
||||
git status
|
||||
# 添加所有相关文件到暂存区
|
||||
git add .
|
||||
|
||||
# 提交并撰写清晰的说明
|
||||
git commit -m "feat: 完成用户登录接口"
|
||||
# 提交并撰写清晰的说明(feat: 功能, fix: 修复, docs: 文档等)
|
||||
git commit -m "feat: 实现用户认证模块"
|
||||
```
|
||||
|
||||
3. **推送到远程功能分支**:
|
||||
为了备份代码或与他人协作,需要将本地的提交推送到远程。
|
||||
2. **推送改动到远程备份**
|
||||
为了代码安全和方便团队协作,应频繁将本地提交推送到远程。
|
||||
```bash
|
||||
git push origin lyf-dev-req0001
|
||||
# -u 参数会设置本地分支跟踪远程分支,后续只需 git push 即可
|
||||
git push -u origin lyf-dev-req0002
|
||||
```
|
||||
|
||||
### 步骤三:合并功能到主开发分支 (`lyf-dev`)
|
||||
### 3. 功能完成:合并回主线
|
||||
|
||||
当新功能开发完成,并且经过充分测试后,执行以下步骤将其合并回 `lyf-dev`。
|
||||
**当功能开发完成并通过测试后,将其合并回 `lyf-dev`:**
|
||||
|
||||
1. **切换回主开发分支**:
|
||||
1. **最后一次同步**
|
||||
在正式合并前,做最后一次同步,确保分支包含了 `lyf-dev` 的所有最新内容。
|
||||
(重复“每日工作第一步”中的同步流程)
|
||||
|
||||
2. **切换到主分支并拉取最新代码**
|
||||
```bash
|
||||
git checkout lyf-dev
|
||||
```
|
||||
|
||||
2. **确保 `lyf-dev` 是最新的**:
|
||||
在合并前,务必先从远程拉取 `lyf-dev` 的最新代码,以防他人在此期间有更新。
|
||||
```bash
|
||||
git pull origin lyf-dev
|
||||
```
|
||||
|
||||
3. **合并功能分支**:
|
||||
这是最关键的一步,将 `lyf-dev-req0001` 的所有新功能合并进来。
|
||||
3. **合并功能分支**
|
||||
我们使用 `--no-ff` (No Fast-forward) 参数来创建合并提交,这样可以清晰地记录“合并了一个功能”这个行为。
|
||||
```bash
|
||||
git merge lyf-dev-req0001
|
||||
# --no-ff 会创建一个新的合并提交,保留分支历史
|
||||
git merge --no-ff lyf-dev-req0002
|
||||
```
|
||||
- **无冲突**:Git 会自动完成合并。
|
||||
- **有冲突 (Conflict)**:Git 会提示你哪些文件冲突了。你需要手动解决这些文件中的冲突,然后执行 `git add .` 和 `git commit` 来完成合并。
|
||||
如果同步工作做得好,这一步通常不会有冲突。
|
||||
|
||||
4. **推送合并后的 `lyf-dev`**:
|
||||
将本地合并好的 `lyf-dev` 分支推送到远程仓库。
|
||||
4. **推送合并后的主分支**
|
||||
```bash
|
||||
git push origin lyf-dev
|
||||
```
|
||||
|
||||
### 步骤四:清理分支(可选)
|
||||
### 4. 清理工作
|
||||
|
||||
合并完成后,功能分支的历史使命就完成了。为了保持仓库的整洁,可以删除它。
|
||||
**合并完成后,功能分支的历史使命就完成了:**
|
||||
|
||||
1. **删除远程分支**:
|
||||
1. **删除远程分支**
|
||||
```bash
|
||||
git push origin --delete lyf-dev-req0001
|
||||
git push origin --delete lyf-dev-req0002
|
||||
```
|
||||
|
||||
2. **删除本地分支**:
|
||||
2. **删除本地分支**
|
||||
```bash
|
||||
git branch -d lyf-dev-req0001
|
||||
git branch -d lyf-dev-req0002
|
||||
```
|
||||
|
||||
遵循以上流程,可以确保您的开发工作流清晰、安全且高效。
|
||||
遵循以上流程,可以确保团队的开发工作流清晰、安全且高效。
|
Loading…
x
Reference in New Issue
Block a user