ShopTRAINING/新需求开发流程.md
2025-07-22 15:51:01 +08:00

7.5 KiB
Raw Blame History

新需求开发标准流程

本文档旨在提供一个标准、安全、高效的新功能开发工作流,涵盖从创建功能分支到最终合并回主开发分支的完整步骤,并融入日常开发的最佳实践。

核心开发理念

  • 主分支保护: lyf-dev 是团队的主开发分支,应始终保持稳定和可部署状态。所有新功能开发都必须在独立的功能分支中进行。
  • 功能分支: 每个新需求(如 req0001)都对应一个功能分支(如 lyf-dev-req0001)。分支命名应清晰、有意义。
  • 小步快跑: 频繁提交Commit、频繁推送Push、频繁与主线同步rebasemerge)。这能有效减少后期合并的难度和风险。
  • 清晰的历史: 保持 Git 提交历史的可读性方便代码审查Code Review和问题追溯。

每日工作第一步:同步最新代码

无论你昨天工作到哪里,每天开始新一天的工作时,请务必执行以下步骤。这是保证团队高效协作、避免合并冲突的基石。

  1. 更新主开发分支 lyf-dev

    # 切换到主开发分支
    git checkout lyf-dev
    
    # 从远程拉取最新代码,--prune 会清理远程已删除的分支引用
    git pull origin lyf-dev --prune
    
  2. 同步你的功能分支 (团队选择一种方案) 将主分支的最新代码同步到你的功能分支,有两种主流方案,请团队根据偏好选择其一。


    方案一 (推荐): 使用 rebase 保持历史清爽

    此方案会让你的分支提交历史保持为一条直线,非常清晰。

    # 切换回你正在开发的功能分支(例如 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-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

    # 这会从最新的 lyf-dev 创建 lyf-dev-req0002 分支并切换过去
    git checkout -b lyf-dev-req0002
    

2. 日常开发:提交与推送

在你的功能分支上(如 lyf-dev-req0002)进行开发:

  1. 编码与本地提交 完成一个小的、完整的功能点后,就进行一次提交。

    # 查看修改状态
    git status
    # 添加所有相关文件到暂存区
    git add .
    # 提交并撰写清晰的说明feat: 功能, fix: 修复, docs: 文档等)
    git commit -m "feat: 实现用户认证模块"
    
  2. 推送改动到远程备份 为了代码安全和方便团队协作,应频繁将本地提交推送到远程。

    # -u 参数会设置本地分支跟踪远程分支,后续只需 git push 即可
    git push -u origin lyf-dev-req0002
    

3. 功能完成:合并回主线

当功能开发完成并通过测试后,将其合并回 lyf-dev

  1. 最后一次同步 在正式合并前,做最后一次同步,确保分支包含了 lyf-dev 的所有最新内容。 (重复“每日工作第一步”中的同步流程)

  2. 切换到主分支并拉取最新代码

    git checkout lyf-dev
    git pull origin lyf-dev
    
  3. 合并功能分支 我们使用 --no-ff (No Fast-forward) 参数来创建合并提交,这样可以清晰地记录“合并了一个功能”这个行为。

    # --no-ff 会创建一个新的合并提交,保留分支历史
    git merge --no-ff lyf-dev-req0002
    

    合并详解与后续操作:

    • 无冲突情况: 执行上述命令后Git 会自动准备一个合并提交,并打开一个文本编辑器,里面包含了默认的提交信息(如 Merge branch 'lyf-dev-req0002' into lyf-dev)。你只需检查信息,然后保存并关闭编辑器,合并就完成了。在这个流程中,你不需要手动执行 git add,因为 Git 已经帮你把所有改动都暂存好了。
    • 有冲突情况:
      1. Git 会提示你存在冲突,并暂停合并。
      2. 你需要手动打开并编辑那些有冲突的文件,解决其中的 <<<<<<<, =======, >>>>>>> 标记。
      3. 关键一步: 每解决完一个文件的冲突,你都必须执行 git add <文件名> 来告诉 Git “这个文件我已解决完毕”。
      4. 当所有冲突文件都 add 之后,你需要手动执行 git commit 来完成合并。此时 Git 同样会打开编辑器让你确认提交信息。
  4. 推送合并后的主分支

    git push origin lyf-dev
    

4. 清理工作

合并完成后,功能分支的历史使命就完成了:

  1. 删除远程分支

    git push origin --delete lyf-dev-req0002
    
  2. 删除本地分支

    git branch -d lyf-dev-req0002
    

遵循以上流程,可以确保团队的开发工作流清晰、安全且高效。


特殊操作:强制覆盖分支

在极少数情况下,你可能希望完全放弃当前功能分支的所有本地修改,使其与主开发分支 lyf-dev 完全一致。这个操作非常危险,因为它会永久删除你本地的所有未提交的改动和独有的提交记录。

请仅在完全确定不再需要当前分支的任何本地工作时才使用此操作!

操作场景

  • 你的功能分支搞得一团糟,想从一个干净的 lyf-dev 状态重新开始。
  • 你错误地在当前分支上进行了一些不相关的实验性修改,并希望彻底清除它们。

操作步骤

# 1. 确保你已经切换到了想要被覆盖的分支(例如 lyf-dev-req0001
git checkout lyf-dev-req0001

# 2. (可选但推荐) 从远程仓库获取最新的代码状态,确保你的远程引用是最新的
git fetch origin

# 3. 执行硬重置,将当前分支强制更新为远程 lyf-dev 分支的状态
#    这会丢弃 lyf-dev-req0001 上所有本地独有的提交和工作区的所有未保存的修改
git reset --hard origin/lyf-dev

执行此命令后,你的 lyf-dev-req0001 分支将变得和远程 lyf-dev 分支一模一样。