如何将分支专属变更迁移至QA分支且排除他人问题代码?
协作场景下的Git分支管理问题与最佳实践
问题背景
当前有两个核心分支:
dev:日常开发分支qa:测试验证分支
事件经过:
- 用户1从
dev拉出feature/user1分支,推送到远程后合并回了dev - 用户2同样从
dev创建feature/user2分支(此时分支里已经包含用户1的代码),完成开发后也合并回了dev - 用户1发现自己的代码有问题,回到
feature/user1分支做修复,但这个修复还没合并到dev或qa - 用户2现在要把自己的代码推去
qa测试,但直接合并feature/user2的话,会把用户1没修复的问题代码也带进去
疑问解答与最佳实践
1. 怎么让用户2只把自己的提交推去qa?
既然有100次提交,范围cherry-pick确实不推荐,试试这两种更高效的方法:
方法一:交互式重基+临时分支
- 先从
dev拉个临时分支,专门用来存用户2的纯变更:git checkout -b temp/user2-qa dev - 用交互式重基把
feature/user2里属于用户2的提交移过来:
弹出的编辑界面里,把所有不属于用户2的提交行删掉,保存退出后,这个临时分支就只剩用户2的代码了。git rebase -i dev feature/user2 - 最后把临时分支合并到
qa:
用完可以删掉临时分支:git checkout qa git merge temp/user2-qagit branch -D temp/user2-qa
方法二:用filter-repo过滤提交
如果觉得重基手动删提交太麻烦,可以用git filter-repo直接过滤出用户2的所有提交:
git filter-repo --commit-callback ' if commit.author_name != "你的用户名" and commit.committer_name != "你的用户名": skip() ' --target-branch temp/user2-qa
这个命令会自动生成一个只包含你提交的分支,之后合并到qa就行。(注意:filter-repo是Git官方推荐替代旧的filter-branch的工具,需要提前安装)
2. 这种协作场景的最佳实践是什么?
- 特性分支尽量隔离:拉特性分支时,如果其他同事的特性还没经过验证,尽量基于
dev上未合并该特性的节点(比如打个标签)来创建自己的分支,避免提前引入不稳定代码。 - 公共分支严格准入:代码合并到
dev前必须经过代码评审和基础测试,别让有问题的代码进入公共分支。如果已经合并,优先把修复分支合并到dev和qa,再做其他特性的迁移。 - 用独立交付分支:要推去
qa的特性,单独从qa拉分支,把自己的变更移植过去再合并,这样不会带进来dev里其他未稳定的代码。 - 提交信息和归属要准确:每个提交的作者信息填对,方便后续追溯和过滤,多人协作这一点很重要。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

