在本地同时处理未完成的代码 A 和紧急需求代码 B,且需确保只上线代码 B,核心是通过版本控制工具(如 Git)进行分支隔离,避免代码 A 的修改混入上线内容。以下是具体步骤和最佳实践:
一、核心原则:用分支隔离不同需求的代码
通过 Git 分支将代码 A 和代码 B 完全分离,确保代码 B 的开发、测试、上线过程不受到代码 A 的干扰,同时保留代码 A 的开发进度。
二、具体操作步骤
1. 保存当前代码 A 的修改(避免丢失)
假设你正在本地main分支(或开发分支dev)开发代码 A,且代码 A 尚未完成 / 未提交,先将其暂存或保存到临时分支,避免切换分支时丢失:
# 查看当前修改状态
git status
# 方式1:暂存未提交的修改(适合代码A未完成,后续还要继续开发)
git stash # 将当前工作区的修改暂存到"暂存栈",工作区恢复干净
# 方式2:提交到临时分支(适合代码A已有部分完成的提交,需长期保存)
git checkout -b feature/A # 创建一个专门保存代码A的分支
git add .
git commit -m "WIP: 代码A开发中(未完成)" # WIP=Work In Progress,标记未完成
2. 创建代码 B 的独立分支(从上线基准分支创建)
为了确保代码 B 的分支只包含线上已有的代码 + 代码 B 的修改,需从「上线基准分支」(如main、master或release分支)创建新分支:
# 切换到上线基准分支(确保该分支是最新的线上代码)
git checkout main # 假设main是线上稳定分支
git pull # 拉取最新的线上代码,避免冲突
# 创建代码B的分支(命名清晰,方便识别)
git checkout -b feature/B
3. 在代码 B 的分支开发并测试
在feature/B分支中,只编写代码 B 的需求,绝对不引入代码 A 的任何修改:
- 开发完成后,本地测试代码 B 的功能(确保独立运行正常,不依赖代码 A)。
- 提交代码 B 的修改:
git add . # 只添加代码B相关的文件
git commit -m "完成代码B:[具体需求描述]"
4. 仅上线代码 B 的分支
将feature/B分支合并到上线基准分支(如main),并部署上线:
# 切换到上线基准分支
git checkout main
# 合并代码B的分支(如需审核,可先提交PR/MR给团队review)
git merge --no-ff feature/B -m "合并代码B到上线分支"
# 推送至远程仓库,触发部署(根据团队流程,可能是CI/CD自动部署或手动部署)
git push origin main
关键 :合并时务必检查git diff,确认合并的内容只有代码 B 的修改,无代码 A 的痕迹。
5. 恢复代码 A 的开发环境
上线代码 B 后,回到代码 A 的开发:
# 方式1:从暂存栈恢复(对应步骤1的方式1)
git checkout 原来开发A的分支(如main或dev)
git stash pop # 将暂存的代码A修改恢复到工作区
# 方式2:从临时分支继续开发(对应步骤1的方式2)
git checkout feature/A # 切换到代码A的分支
# 继续开发...
三、避坑要点
- 禁止在代码 B 的分支中修改代码 A 的文件
开发时严格区分文件,若代码 B 和代码 A 涉及同一文件,需手动对比修改,只保留代码 B 的必要变更(可通过git add -p精细化选择修改内容)。
- 上线前必须做分支对比
用git diff main feature/B查看代码 B 分支与上线分支的差异,确保只有预期的修改。
- 紧急情况可直接 cherry-pick 单个提交
若代码 B 已在其他分支开发(不小心混入了代码 A),可通过cherry-pick提取代码 B 的单个提交:
# 找到代码B的提交哈希(通过git log查看)
git checkout main
git cherry-pick <代码B的提交哈希> # 只将该提交应用到main分支
- 本地开发工具辅助
用 VS Code 的「分支管理」或 SourceTree 等 GUI 工具,可视化查看分支差异,避免操作失误。
总结
核心逻辑是 **"分支隔离 + 精准合并"**:通过独立分支将代码 A 和 B 物理隔离,确保上线流程只引入代码 B 的修改。这种方式既能响应紧急需求,又能保护未完成的开发工作,是团队协作和版本管理的标准实践。