一、开始开发
按照功能模块分支
person1、person2 从master分出feat1、feat2、feat3等分支,每个分支是一个功能模块,分别在feat_*分支上开发分配格各自的功能。
这么做的原因是,经常会有这种情况,这一期提出了多个功能进行开发,到了最后部署生产的时候,只选择其中的某些功能上线,因此没有按人员或者按照迭代去拉分支。
二、功能开发完成,测试阶段
feat 合并到 test
1.feat1、feat2等功能开发完成后,可以将feat分支往test分支合并
2. 测试人员以test分支部署的环境,进行测试
测试出bug
- 测试发现bug,开发人员要切回feat分支进行修改,然后再merge到test上,重新测试
- 这样来回切换分支确实比较麻烦,但是为了各个feat之前不想互污染,所以一定要切回自己的feat修改
三、测试完成,上线阶段
从master 分出 release_v2 分支
// master
git checkout -b release_v2
release_v2 即这次需要上线的feat 合集分支
feat 合并到 release_v2
挑出这次上线的feat,比如feat1、feat2,把它们合并到release_v2(当然也可以全部feat都上线)
// release_v2
git merge --squash feat1
git add .
git commit -m 'feat: feat1的功能balala'
// release_v2
git merge --squash feat2
git add .
git commit -m 'feat: feat2的功能balala'
使用 merge --squash
--squash 用于合并多个commit,比如feat1的开发者,在开发的时候,可能提交过多次,测试阶段可能还修改过bug提交多次。
--squash可以合并feat1的所有commit为一次commit,这样release_v2上的commit就非常清晰
四、 release_v2 合并到 master
此时release_v2上就是这次我们所有需要上线的功能了,并且这个分支上的commit为这种,一个feat一个commit
feat: feat2 功能2 balabala
feat: feat1 功能1 balabala
合并到master
// master
git merge --squash release_v2
这里如果不使用--squash,master上就会有feat1、feat2的commit。。
我们希望master的commit只有每次的release,即一个版本作为一个commit,从上线版本的角度看很清晰,同时方便以后的版本回退。
五、其它
- hotfix这种就和其它git流程一样了,master => fix => master
- 图中第二个开发人员名字写错了,应该是person_2 .... 0.0
- 这种最好是各个功能互不影响,如果有featB需要依赖featA,建议featB进入下一次迭代,或者featA、featB由同一人开发
六、如果feat之间需要修改相同的公共模块
1、feat_common
- 可以再从master上分出一个
feat_common,指定一个人员先开发feat_common - feat_common,然后各个feat都
merge feat_common
2、开发人员多沟通
如果公共模块改动不大,可以线下沟通,统一公共模块的修改,分别写到自己的feat里