#rickgao/git #git/flow/feature-branching
工作流:Feature Branching
分支开发、主干发布
![[Excalidraw/Drawing 2021-07-15 16.50.09 git 分支.excalidraw.md]]
因部门分支策略历史:
- 发布分支是
product
,- 主干
master
作为稳定版本分支(每周自动合并product -> master
)。在该背景下,为了降低理解成本:==我们直接把product当成主干分支即可==。
Git分支可以分成两种分支
- product(主干分支)
- 预发布
- 灰度
- 线上
- feature(特性分支)
- 本地开发
- 项目(测试)环境
步骤一:创建特性分支
在product
分支的基础上,checkout
一个新的分支出来
git checkout product # 确保在 product 分支上
git checkout -b feat_monitoring_rickgao_tapdid_0421 # 新建一个功能开发分支
分支名
<分支类型>_<功能简称>_<作者>_<tapd的id>_<时间>
分支类型一般为
feat
:开发新的功能fix
:修BUGrefac
:重构、优化
git checkout
的本质就是移动HEAD
- 当
git checkout
后面跟着的是branch
的时候,即上图中的product
就是一个branch
,那git checkout product
就表示:HEAD
指向product
git checkout -b
git checkout
命令意为创建并切换到一个新的分支。即,不仅可以创建一个新的分支,还可以通过一个命令同时切换它。
git checkout -b
选项只不过是以下两个命令的组合:在执行git checkout <new-branch>
之前执行git branch <new-branch>
操作。Syntax:
$ git checkout -b <branchname>
Output:
上面的输出表示:创建了
branch3
并从master
分支切换到branch3
分支。
步骤二:编码与自测
当我们在新的分支下开发新功能,不断的git commit
后,就会有以下这个图
步骤三:自测与联调
当我们提测或者测试的时候,都会要有一个测试环境,测试环境添加项目后会自动给该项目添加一个测试分支,比如project_10917162_20210406
。
当我们有了测试分支的时候,我们先更新我们的本地分支,再切换到具体的测试分支
git pull # 更新本地分支
git checkout project_10917162_20210406 # 切换到测试分支
测试环境的分支默认从
master
分支checkout
出来的,如果没有及时自动合并会和product
分支不一致。
我们测试环境只不过是为了测试我们的功能,测试分支原本的样子及合并后的样子都不重要,所以我们直接让测试分支指向我们的特性分支即可,即执行命令
git reset --hard feat_monitoring_rickgao_tapdid_0421
在
git push
的工程中经常会遇到要解决冲突,因为我们的效果就是直接要特性分支的代码,所以直接无视冲突即可git push --force
项目环境中:是直接访问到该分支项目文件下,所以在测试分支
run build
后push
就可以进行验证了
在项目环境时,我们经常会进行很多代码的修复。
面对特性分支和多出来的测试分支,有两种处理方式:
- 直接忽略放弃特性分支,把测试分支等作特性分支
- 通过
git reset --hard
重置了测试分支后,两者只是名字有区别 - 完成直接忽略放弃原特性分支;把测试分支当做现特性分支
- 通过
- 把测试分支作为测试环境的发布分支
- 即在特性分支修复,然后打包后
merge
到测试分支
- 即在特性分支修复,然后打包后
如果不需要的分支我们记得要去删除,比如:这里我不要了原特性分支了
git branch -d feat_monitoring_rickgao_tapdid_0421
步骤四:合并主干分支&&CR&&发布(预发布、灰度、线上)
项目环境验证完毕后,在Gitlab中申请合并代码,并发起CR;CR通过后进行打包及发布。