tech share
  • tech-share
  • Engineering
    • 登录鉴权
    • SSR 页面路由
    • npm 版本号
    • 缓存
    • 数据库容灾
    • 动态效果导出 gif
    • Chrome-devtools
    • C 端 H5 性能优化
    • Docker
    • Monorepo 最佳实践
    • 技术架构演化
    • 项目规范最佳实践
    • snowpack
    • 静态资源重试
    • 前端页面渲染分析
    • Git
    • 前端重构
    • 微前端
    • 项目依赖分析
    • 前端监控原理
    • webpack
    • BS 架构与 CS 架构
    • HTTPS
    • package-lock.json 生成逻辑
    • SVN(Subversion)
    • 数据库分类
    • gulp
    • 前端架构
    • Bundle & Bundless
    • 控制反转 IoC
  • JavaScript
    • Javascript 性能
    • JavaScript 原型(2) - 原型与原型链
    • JavaScript 原型(1) - 构造函数
    • JavaScript - Promise
    • ES6 解构赋值
    • 前端离线化
    • Proxy
    • Object.defineProperty()简介
    • TypeScript
  • MachineLearning
    • GAN生成对抗网络
    • 虚拟对抗训练
    • 深度度量学习
    • 原型网络
    • PyTorch优化器
    • 隐马尔可夫模型2
    • Shapley Value 算法
    • Embarassingly Autoencoder算法
    • AutoRec算法及其后续发展
    • 深度学习常用激活函数
    • 序列预测ConvTran算法
    • 联邦学习
    • 深度学习推荐系统算法整理
    • 隐马尔可夫模型
    • 黎曼优化方法
    • FM算法
    • 机器学习常见评价指标
    • VAE算法
    • Adam优化器详解
    • Transformer算法
    • Self-attention 推荐算法
    • CNN 卷积神经网络
    • 图嵌入
    • 集成学习算法
    • RecBole开源框架
    • NCE-PLRec
    • 深度学习初始化方法
    • RNN循环神经网络
    • PyTorch数据处理
    • PyTorch安装和基本操作
    • XGBoost算法
    • NCF算法与简单MF的对比
    • 计算最佳传输
  • CSS
    • 什么是BFC
    • 纯CSS实现可拖动布局
    • 滚动穿透解决方案
  • React
    • React 生命周期
    • React Ref
    • React Hooks
    • SWR
    • React 数据流
    • React 函数式组件和类组件的区别
  • 可视化
    • OffscreenCanvas
    • Echarts 平滑曲线端点为什么不平滑
    • 颜色空间
    • 词云布局解析
    • 3D 数学基础
    • Canvas 图片处理
    • GLGL ES
    • WebGL 中绘制直线
    • Graphics API
    • 现代计算机图形学基础
    • Canvas 灰度
  • Vue
    • Vue2.x全局挂载整理
    • Vue2.6.x源码阅读
      • Vue2.6.x源码阅读 - 2.目录结构分析
      • Vue2.6.x源码阅读 - 4.源码阅读-platform
      • Vue2.6.x源码阅读 - 1.准备工作
      • Vue2.6.x源码阅读 - 5.源码阅读-core-Vue构造函数
      • Vue2.6.x源码阅读 - 7.源码阅读-core-响应式原理
      • Vue2.6.x源码阅读 - 3.源码阅读-shared
      • Vue2.6.x源码阅读 - 6.源码阅读-core-组件挂载
    • Vue + TypeScript Web应用实践
    • Vue2.x指令
    • nextTick()的使用
    • vue-cli2.x 的使用与项目结构分析
    • Vue响应式原理及总结
    • VueX的使用
    • Electron-Vue + Python 桌面应用实践
    • Vite
    • Vue组件通信整理
    • 记录一个问题的探索过程
  • Linux
    • memcg
  • GameDev
    • 游戏中的几种投影视图
    • 从零开始写软渲染器06
    • 从零开始写软渲染器05
    • 从零开始写软渲染器04
    • 从零开始写软渲染器03
    • 从零开始写软渲染器02
    • 从零开始写软渲染器01
    • 从零开始写软渲染器00
    • 现代游戏常用的几种寻路方案(一)
  • Node
    • NPM Dependency
    • Node 优势
    • Node Stream
    • Node 模块系统
  • HTML
    • html5语义与结构元素
  • 跨端
    • Flutter 介绍
  • Golang
    • Golang 基础
  • AR
    • SceneKit
由 GitBook 提供支持
在本页
  • Git 概述
  • Git 常用命令
  • 版本合并
  • 一个推荐的 Git 工作流
  • 推荐工具
  • Git 工作流
  • Git 分支类型
  • Git Flow 工作流

这有帮助吗?

  1. Engineering

Git

Git 概述

Git 主要分成 3 个分区,工作区,暂存区和版本库

工作区即保存后暂未git add的状态 暂存区是git add后未git commit的状态 版本库即git commit后的状态 使用git push可将本地的版本库推送到远程版本库

Git 常用命令

版本合并

  • merge

在将一个分支的修改提交到另一分支时,常用git merge命令,使用git merge会在目标分支创建一个新的 commit,这个 commit 记录了两个分支不同的修改,如果存在冲突,修改先解决冲突,再提交这个 commit

  • rebase

  • 不要通过 rebase 操作已经提交到远程仓库的分支,推荐 rebase 处理只会影响自己的分支

由于每次 merge 都会生成一个 commit,所以在多个分支相互影响的情况下,一个分支的 commit 可能会比较乱,因为其中大部分都是 merge commit 的信息。

使用 rebase 可以将一个分支的某一段提交应用到另一分支上

git rebase [startpointhash] [endpointhash] --onto [branchName]

如果某一个分支分支是完全先于当前分支的,可以使用git rebase [target]来使当前分支同步到另一分支的修改

使用rebase -i [startpointhash] [endpointhash]可以缩减一个分支上的多次 commit 为一个 commit

一个推荐的 Git 工作流

  • master 为线上稳定分支,线上环境应该只部署此分支

  • develop 分支为产品体验分支,在此分支上可能存在多个 feature

  • 当开发一个新的功能时,从 master 分支 checkout 出一个新的 feature 分支,开发完成后 merge 到 develop 分支上,在产品预览环境测试,没有问题后将此 feature 分支合并到 master

  • hotfix 分支为快速修复 bug 分支,hotfix 是 master 上 checkout 出的分支,修复完成后直接 merge 到 master 上

推荐工具

  • VsCode GitLen

  • Git Kraken

Git 工作流

团队一般为了规范开发,保持良好的代码提交记录以及维护 Git 分支结构清晰,方便后续维护等,都会迫切需要一个比较规范的 Git 工作流。

Git 分支类型

  • master 分支

    master 为产品主分支,该分支为只读唯一分支,也是用于部署生产环境的分支,需确保 master 分支的稳定性。master 分支一般由 release 分支或 hotfix 分支合并,任何情况下都不应该直接修改 master 分支代码。产品的功能全部实现后,最终在 master 分支对外发布,另外所有在 master 分支的推送应该打标签(tag)做记录,方便追溯。master 分支不可删除。

  • develop 分支

    develop 为主开发分支,基于 master 分支创建,始终保持最新完成功能的代码以及 bug 修复后的代码。develop 分支为只读唯一分支,只能从其他分支合并,不可以直接在该分支做功能开发或 bug 修复。一般开发新功能时,feature 分支都是基于 develop 分支下创建的。develop 分支包含所有要发布到下一个 release 的代码。feature 功能分支完成后, 开发人员需合并到 develop 分支(不推送远程),需先将 develop 分支合并到 feature,解决完冲突后再合并到 develop 分支。当所有新功能开发完成后,开发人员并自测完成后,此时从 develop 拉取 release 分支,进行提测。release 或 hotfix 分支上线完成后, 开发人员需合并到 develop 分支并推送远程。develop 分支不可删。

  • feature 分支

    feature 分支通常为新功能或新特性开发分支,以 develop 分支为基础创建 feature 分支。分支命名: feature/ 开头的为新特性或新功能分支,建议的命名规则: feature/user_createtime_feature,例如:feature/ftd_20201018_alipay,含义为:开发人员 ftd 在 2020 年 10 月 18 日时创建了一个支付宝支付的功能分支。新特性或新功能开发完成后,开发人员需合到 develop 分支。feature 分支可同时存在多个,用于团队中多个功能同时开发。feature 分支属于临时分支,功能完成后可选删除。

  • release 分支

    release 分支为预上线分支,基于本次上线所有的 feature 分支合并到 develop 分支之后,从 develop 分支创建。分支命名: release/ 开头的为预上线分支,建议的命名规则: release/version_publishtime,例如:release/v2.1.1_20201018,含义为:版本号 v2.1.1 计划于 2020 年 10 月 18 日时发布。release 分支主要用于提交给测试人员进行功能测试。发布提测阶段,会以 release 分支代码为基准进行提测。测试过程中发现的 bug 在本分支进行修复,上线完成后需合并到 develop/master 分支并推送远程。release 分支属于临时分支,产品上线后可选删除。 当有一组 feature 开发完成后,首先开发人员会各自将最新功能代码合并到 develop 分支。进入提测阶段时,开发组长在 develop 分支上创建 release 分支。 如果在测试过程中发现 bug 需要修复,则直接由开发者在 release 分支修复并提交。当测试完成后,开发组长将 release 分支合并到 master 和 develop 分支,此时 master 为最新可发布代码,用作产品发布上线。

  • hotfix 分支

    hotfix 分支为线上 bug 修复分支或叫补丁分支,主要用于对线上的版本进行 bug 修复。分支命名: hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似,建议的命名规则: hotfix/user_createtime_hotfix,例如:hotfix/ftd_20201018_alipaybugfix,含义为:开发人员 ftd 在 2020 年 10 月 18 日时创建了一个支付宝支付 bug 修复的分支。hotfix 分支用于线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 hotfix 分支。当问题修复完成后,需要合并到 master 分支和 develop 分支并推送远程。所有 hotfix 分支的修改会进入到下一个 release。hotfix 分支属于临时分支,bug 修复上线后可选删除。

Git Flow 工作流

我们现在已经了解了 Git 的分支有哪些类型,不过往往在一个团队人数较多,创建的分支也比较多的时候,还是会带来很多分支操作上的困扰。Git Flow 的工作流模式可以从流程上很好的规范开发者。

  1. 主分支流程

  2. master 分支记录了每次版本发布历史和 tag 标记。

  3. develop 分支记录了所有开发的版本历史。

  4. develop 分支仅第一次创建时从 master 分支拉取。

  5. 开发流程

  6. feature 分支是从 develop 分支拉取的分支。

  7. 每个 feature 完成后需合并到 develop 分支。

  8. 提测发布流程

  9. release 分支是在所有功能开发自测完成后,从 develop 分支拉取的分支。

  10. release 分支一旦创建后,通常不再从 develop 分支拉取,该分支只做 bug 修复,文档生成和其他面向发布的任务。

  11. release 分支测试完成,达到上线标准后,需合并回 master 分支和 develop 分支。

  12. bug 修复流程

  13. hotfix 分支是在线上出现 bug 之后,从 master 分支拉取的分支。

  14. hotfix 分支测试完成后,需合并回 master 分支和 develop 分支。

上一页前端页面渲染分析下一页前端重构

最后更新于4年前

这有帮助吗?