Git开发流程

600 阅读2分钟

WechatIMG2008.png

一、开始开发

按照功能模块分支

person1、person2 从master分出feat1、feat2、feat3等分支,每个分支是一个功能模块,分别在feat_*分支上开发分配格各自的功能。

这么做的原因是,经常会有这种情况,这一期提出了多个功能进行开发,到了最后部署生产的时候,只选择其中的某些功能上线,因此没有按人员或者按照迭代去拉分支。

二、功能开发完成,测试阶段

feat 合并到 test

1.feat1、feat2等功能开发完成后,可以将feat分支往test分支合并
2. 测试人员以test分支部署的环境,进行测试

测试出bug

  1. 测试发现bug,开发人员要切回feat分支进行修改,然后再merge到test上,重新测试
  2. 这样来回切换分支确实比较麻烦,但是为了各个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,从上线版本的角度看很清晰,同时方便以后的版本回退。

五、其它

  1. hotfix这种就和其它git流程一样了,master => fix => master
  2. 图中第二个开发人员名字写错了,应该是person_2 .... 0.0
  3. 这种最好是各个功能互不影响,如果有featB需要依赖featA,建议featB进入下一次迭代,或者featA、featB由同一人开发

六、如果feat之间需要修改相同的公共模块

1、feat_common

  1. 可以再从master上分出一个feat_common,指定一个人员先开发feat_common
  2. feat_common,然后各个feat都merge feat_common

2、开发人员多沟通

如果公共模块改动不大,可以线下沟通,统一公共模块的修改,分别写到自己的feat里