Git 基础规范/工作流
分支命名规范
- feature/xxx:新功能开发
- bugfix/xxx:缺陷修复
- hotfix/xxx:紧急修复
- chore/xxx:日常维护任务
- experiment/xxx:试验性开发
- master:生产环境
- preview:预生产环境
- develop:开发环境
- release:测试环境
工作流
- 从master分支创建feature/fix分支,开发完成后合并到develop和release分支
- 功能测试完成后,如果有预生产环境,合并到preview分支
- 预生产环境测试完成后,合并到master分支
- 新建tag,版本发布
整个流程中确保feature/fix单一分支的代码保持纯净独立,同步进行多个需求开发或者bug修复时,优先选择建立多个分支,计划有变时相对更为灵活。
分支合并
Git有两种合并:一种是”直进式合并”(fast forward),不生成单独的合并节点;另一种是”非直进式合并”(none fast-forword),会生成单独节点。建议总是采用后者(即使用–no-ff参数)。只要发生合并,就会有一个单独的合并节点。方便后续日志查看。
直进式合并
1 | $ git merge feature/v1 |
非直进式合并
1 | $ git merge feature/v1 --no-ff |
squash和rebase
实际开发过程中,分支的提交可能有多次,为了保持主分支的日志相对整洁,在发起Pull Request之前,应该先将多个commit合并成一个,如果同一版本有多个分支并行,建议先将多个分支合并到一个分支,再用合并后的分支发起Pull Request。
squash合并多个commit
1 | $ git merge feature/v1 --squash |
使用–squash选项执行merge时,Git不会像在正常合并中那样在目标分支中创建合并提交,而是会将分支上多个提交变更直接作用到工作区中作为本地更改,然后将目标分支的指针指向这个新的提交,你只需要手动正常的提交这些更改,就好像你在当前分支上做了一次所有差异化变更一样。
rebase合并多个commit
1 | ## 指定节点数量 |
使用rebase合并时,-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit。(注:该区间指定的是一个前开后闭的区间)。
每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令:
1 | pick:保留该commit(缩写:p) |
i 进入编辑状态,以下操作会将v1分支上历史4次commmit合并成一个,并重新修改注释信息:
1 | r 4a8eefd feat: v1_c1 |
wq 保存退出后进入注释修改界面:
1 | feat: v1_c1 |
i 进入编辑状态修改注释,wq保存退出就完成了合并操作。
1 | $ git rebase -i HEAD~4 |
非常规情况下不建议通过rebase对任何已经提交到公共仓库中的commit进行修改。
参考链接
[分支命名规范] https://mp.weixin.qq.com/s/b0IBRcYiYuBcgggInlN92g
[Git工作流] https://www.ruanyifeng.com/blog/2015/12/git-workflow.html
[Git merge] https://zhuanlan.zhihu.com/p/462530860
[Git rebase] https://juejin.cn/post/6844903600976576519