同时开发多个功能时分支版本管理

172 阅读4分钟

Q:

如果目前开发有如下情况,基础版本A,已经上线,现在同时开发功能B,C,D,其中B开发完了,部署到测试环境等待测试进行测试,C功能正在开发,D功能也开发完了,现在测试要测试B,D功能,但是上线的话,B,C上线,D的话后续版本才会上线 。所以使用git的话,如何在基础A版本上,进行分支合并等操作,使得满足我这个情况?

A:

  1. 创建分支
    • 从主分支(假设主分支叫 main ,对应基础版本 A)为每个新功能创建独立分支:
      • 为功能 B 创建分支 feature/Bgit checkout -b feature/B main,开发人员在这个分支上完成功能 B 的开发,完成后推送到远程仓库。
      • 为功能 C 创建分支 feature/Cgit checkout -b feature/C main,开发人员持续在该分支进行功能 C 的开发。
      • 为功能 D 创建分支 feature/Dgit checkout -b feature/D main,开发人员完成功能 D 开发后,推送到远程仓库。
  1. 测试功能 B 和 D
    • 测试人员要测试 B 和 D 时,在测试环境拉取对应的分支代码:
      • 拉取 feature/B 分支到测试环境部署,测试人员进行测试。
      • 拉取 feature/D 分支到测试环境部署,测试人员进行测试。
  1. 准备上线 B 和 C
    • 当测试 B 没问题后,将 feature/B 分支合并到 main 分支:
      • 首先切回主分支 git checkout main
      • 然后合并 feature/Bgit merge --no-ff feature/B--no-ff 选项可以保留功能分支的提交历史,方便后续追溯。
    • 由于 C 还在开发中,等 C 开发完成测试通过后,同样切回主分支,再合并 feature/C
      • git checkout main
      • git merge --no-ff feature/C
  1. 处理后续版本的 D
    • 功能 D 不在本次上线范围,它的分支 feature/D 可以保留在远程仓库,后续需要上线 D 时,再按上述合并流程,将 feature/D 合并到 main 分支。如果后续开发过程中,还需要基于 feature/D 继续开发,可以继续在该分支提交代码。同时,为了避免代码冲突,在合并 feature/Dmain 分支前,建议先拉取最新的 main 分支代码到 feature/D 分支,解决潜在冲突 ,操作如下:
      • git checkout feature/D
      • git pull origin main
      • 解决冲突后,推送 feature/D 分支到远程仓库,再按合并流程操作。

Q:

只有一台测试服务器,有没有一种情况,可以把B和D的代码合并,部署到测试环境,这样测试同事可以同时测试B和D的功能,但是如何处理后续,只上线B功能,不上线D功能,D功能后面版本迭代才上线

A:

可以通过创建一个临时合并分支来解决这个问题:

  1. 创建临时合并分支
    • 首先,切换到主分支:git checkout main
    • 然后创建一个临时分支,用于合并 B 和 D 功能的代码:git checkout -b temp_bd
    • 接着把feature/Bfeature/D分支分别合并进来:
      • git merge --no-ff feature/B
      • git merge --no-ff feature/D
    • 将这个临时分支temp_bd部署到唯一的测试服务器上,这样测试人员就可以同时测试 B 和 D 功能了。
  1. 上线 B 功能
    • 当测试完成且 B 功能准备上线时,切换回主分支:git checkout main
    • feature/B分支合并到主分支:git merge --no-ff feature/B,此时 B 功能就进入了正式上线流程。
  1. 清理临时分支
    • 切换到临时分支temp_bdgit checkout temp_bd
    • 撤销feature/D分支合并进来的操作,恢复到只包含 B 功能代码的状态。如果还没有提交feature/D的合并,直接使用git reset --hard HEAD^^表示撤销上一步操作)。要是已经提交了,可以使用git revert -m 1 <commit-ID>,其中<commit-ID>是合并feature/D的提交 ID,-m 1 表示选择合并进来的第一个父提交,也就是保留主分支的状态,撤销分支的合并。
    • 清理临时分支:git branch -d temp_bd
  1. 后续 D 功能上线
    • 当 D 功能在后续版本需要上线时,切换回主分支:git checkout main
    • 把经过后续迭代完善的feature/D分支合并到主分支:git merge --no-ff feature/D 。这样就可以把 D 功能上线到正式产品中。