1、介绍
WorkFlow 的字面意思,工作流,即工作流程。工作流不涉及任何命令,它是一个规则,是由开发者自定义自遵守的规则,需要我们每个开发者熟悉并且也必须遵守的规则。
2、名词介绍
主要分支:
• master:该分支上的最新代码永远是版本发布状态 。
• develop:该分支则是最新的开发进度。
辅助分支:
• feature:该分支为最新需求功能的开发分支 ,是独立功能所在的分支。命名规则以feature开头,功能单词(或简写)结尾,中间以中划线连接。例:feature-share、feature-activity等。
• test:该分支为服务端特有分支,用来给测试人员测试的分支(包含移动端功能测试)。该分支包含开发者所有feature的功能。test分支与develop分支是同步的。
• release:该分支上的代码为需要发布上线的功能集合,如果功能不需要发布则一定不要合入该分支。新版本发布后删除自己即可。命名规则同feature分支,但结尾不同,以release开头,版本号结尾。例:release-v1.0.1。
• hotfix:该分支是用来做线上紧急 bug 修复的分支。从master分支检出,合入test分支进行测试,测试通过后必须合入release分支,然后可以随版本发布或者如果需要紧急发布,则可直接合入master分支进行发布。
3、合入&拉取&提交规则
分支名称 | 合入规则 | 拉取规则 | 提交规则 | 操作者 |
---|---|---|---|---|
master | 在release分支测试通过的功能 | 初始化:拉取develop分支;其他:只允许拉取hotfix分支 | 不允许任何人在此分支提交代码 | 管理员 |
develop | 在自测通过的前提下,任何普通开发者都可以合入代码 | 所有feature分支都基于这个分支拉取 | 按照提交规则提交,见规则4.1 | 管理员&开发者 |
feature | 尽量避免两个独立feature相互合并 | 无 | 按照提交规则提交,见规则4.1 | 管理员&开发者 |
test | 由开发者合入develop分支的同时合入该分支 | 无 | 按照提交规则提交,见规则4.1 | 管理员&开发者 |
release | 只能合入在test分支测试通过的feature | 无 | 无 | 管理员 |
hotfix | 无 | 无 | 按照提交规则提交,见规则4.1 | 管理员&开发者 |
4、工作流程
移动端
服务端
服务端-原图
5、命令学习
5.1 merge & rebase
merge | rebase |
---|---|
自动创建一个新的commit。如果合并的时候遇到冲突,仅需要修改后重新commit ✅优点:记录了真实的commit情况,包括每个分支的详情 ✅缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。 注 意 : 只 有 在 冲 突 的 时 候 , 解 决 完 冲 突 才 会 自 动 产 生 一 个 c o m m i t 。 \color{red}{注意:只有在冲突的时候,解决完冲突才会自动产生一个commit。} 注意:只有在冲突的时候,解决完冲突才会自动产生一个commit。 | 俗称变基,变基是什么? 找公共祖先 执行rebase后,提交会被移除,并且 feature 分支被重置到 master 分支,feature 分支上的提交被重新应用到 master。差别在于这些重新应用的提交是原始的副本,它们的 SHA-1 值和原来的提交不一样。如果遇到冲突需要执行一下三步解决: • 修改冲突部分 • git add • git rebase --continue ✅优点:得到更简洁的项目历史,去掉了merge commit ✅缺点:如果合并出现代码问题不容易定位,因为re-write了history |
![]() | ![]() |
上游分支合并下游分支内容时 | 下游分支更新上游分支内容时 |
5.2 cherry-pick
cherry-pick可以将某个分支上的某一个功能合入到其他分支,依据是C这一次的commit SHA1
命令方式 | Idea工具方式 |
---|---|
1、切换到 develop 分支。 2、通过 git log feature,找到 C 的 SHA1 值。 3、通过 git cherry-pick <C的SHA1> ,将 C 的修改内容合并到当前内容分支 develop 中。 4、若无冲突,过程就已经完成了。如果有冲突,按正常冲突解决流程即可。 | 切换到 develop 分支。 右键你要cherr-pick的功能,选择cherr-pick即可 ![]() |
5.3 stash
该命令是将本地修改暂存。
当你需要切换分支时,但此时本地有修改,为了避免切换分支导致的冲突,你可以执行git stash将本地修改暂存起来,等到处理完后,切回原有分支再pop出来。【对应Idea操作是Seleve】
git stash // 将本地修改暂存到git缓存区
git stash pop // 将最近一次缓存内容恢复
git stash pop stash@{1} // 恢复指定索引的暂存内容
5.4 reset
撤销、重置
6、其他
6.1、提交信息编写规范
[提交的类型][类型关键词(或模块名称或功能名称)]
–该行是空行–
该部分填写详细修改点
举例
[feature][商城订单]
1、新增商城首页分享功能
2、修复商场首页下滑卡顿的bug
3、优化xxx页面的加载性能
说明:
1、目前提交的类型有feature 、 bug和optimization,尽量一次提交类型单一。(如果一次提交内同时有feature和bug,那你该考虑一下是不是可以先把feature提交了再提交bug的修复,这样也会方便回滚。如果没法分开,那么类型只写一个即可,但需要再详情部分描述清楚)
2、类型关键词:尽量和禅道的feature名称保持一致。如果是禅道上登记的bug,请附上bug id(例如:[bug][商城订单-482])
6.2 在线学习网站
Git Online