第一步:初始化提交
master分支:

图 1
所有分支

图 2
第二步:基于master分支创建 dev/test 两个分支

图 3
创建完成

图 4
红色的是表示当前工作目录所在分支

图 5
目前为止当前分支和所有分支的graph没有什么不同

图 6
接下来把代码push到dev上,当前分支和所有分支效果一样如下,所以这里只展示一个图

图 7
接下来把分支切换到test上效果和上图一样,
把代码push到test分支上,效果如下

图 8
这里有个细节需要注意一下,就是基于master分支创建的dev和test分支,把master分支代码直接push到这两个分支即可,不需提交(可能这不是什么问题,但是对已小白来说是第一次知道这个事)
这里做了一个测试就是创建tag对应版本号为v1.0.0,如下:

图 9
开发分支qliu_demo_20180723 comment代码:(commit和push前后 all Branches选中和不选中效果是一样的)

图 10
开发分支qliu_demo_20180723 push代码:

图 11
从commit 和 push 前后操作对比可以看出,只commit会有提交记录,但是没有远程分支,push操作之后,远程会有一个远程分支(push之后橙色背景的分支)与之对应
继续在qliu_demo_20180723分支做开发,commit代码:

图 12
push代码:

图 13
开发阶段的n次本地commit和push,这个过程也可以n次commit,最后只做一次push操作;push完成之后,把代码merge到dev分支,本地切换到dev分支,依次执行fetch,pull(这里是防止代码冲突,如果确定代码不会冲突可以跳过fetch直接pull操作)
这时候分别切换到 master、dev、test、qliu_demo_20180723是个分支graph图如下:
master:

图 14
dev:

图 15
test:

图 16
qliu_demo_20180723:

图 17
截至目前是只有一个开发者在操作,接下来在创建一个分支模拟两个操作者同时开发,(多个开发者类似,每个人有自己的分支),新建分支user/zhang_demo_20180723分支(红色):

图 18
commit代码:

图 19
push代码:(这样commit,push操作连续三次,后两次就不截图了):

图 20
三次操作完的结果:

图 21
这时候把代码merger到dev上,图下:

图 22
再次切换到qliu_demo_20180723分支开发执行commit,push,merger到dev分支上:

图 23
此时切换到dev上,fetch,pull代码,graph图如下:

图 24
这时候如果需要对已有功能测试,测试需要pull各个开发者分支的代码到test上,如下:
此时pull第一个开发者的代码(user/qliu_demo_20180723)如下:

图 25

图 26
接着pull第二个开发者代码(zhang_demo_20180723)如下:当前test分支

图 27
master分支:graph黑色表示当前分支master,红色表示test,绿色表示zhang_demo_20180723,蓝色表示qliu_demo_20180723,灰色的表示在蓝色分支上有两次commit和push,一次merger,
从历史记录看出提交记录和顺序,一个节点代表着一次commit
红色线条第一个节点,表示从蓝色分支(qliu_demo_20180723)pull代码,第二个节点表示从绿色节点(zhange_demo_20180723)pull代码

图 28
所有分支:

图 29
模拟实际开发分支commit代码的过程,这里主要是用主分支master,开发分支dev,测试分支test,本地分支qliu_demo_20180723,zhang_demo_20180723,
该开发流程是这样的,基于开发分支建立本地方分支qliu和zhang两个分支,开发完成commit,push,merger到dev上,test分支pull本地分支qliu和zhang对应的远程分支代码,测试完成,master主分支pulltest分支代码。
补充说明一下本地分支和远程分支:

图 30(本地分支)

图 31(远程分支)
图30和图31对比可以看出本地分支commit代码的是时候远程会产生一个名字一样的远程分支,如果没有提交,这没有
浙公网安备 33010602011771号