一、 Git Flow 工作模型的原理

无规矩不成方圆,但是规矩太多了,则感觉到束缚。我们一个人工作的时候喜欢无拘无束,想怎么干就怎么干,没有人评判,没有人检验。时间久了就会盲目自大,以为增删改查熟悉业务就能够搞定一些。但是当项目逐渐扩大,原来的灵活逐渐变成了混乱,原来的快速迭代因为过于随意的代码,而开发进度迟迟不前。掌握一种规范,便在处理类似问题的时候有章可循,也能够快速的融入一个团队。另外所谓规范,可以说是比较好的实践,按照规范来,项目也能稳健的发展。

Git Flow 就是如何使用git 分支的一种规范,或者叫做推荐。

根据Git Flow 的推荐,我们要将Git 的分支分为 master 、develop 、hotfix 、release、feature这五个分支。各种分支分别负责不同的功能,平时开发的时候各司其职,因此会有比较小的冲突率。那么可以用这些减少冲突的时间,少加会班,多有点自己的生活岂不快哉。一图胜千言:

master 分支

master 分支主要方稳定、随时可上线的版本。这个分支只能从别的分支上合并过来,一般来讲,从develop 上合并,或者从bugfix 分支上合并过来。不能直接在master 分支上进行commit文件。因为是稳定的版本,所以每次版本发布都要在这个分支上添加标签(tag)。

develop 分支

develop 分支是所有开发分支的母体,所有的开发分支都要从develop上切出来,开发完成之后最后都要合并到develop上。

hotfix 分支

hotfix 分支用来修复生产中的紧急bug,由于develop分支尚处于开发过程中,代码不稳定,不能直接应用于生产。所以从master分支上切出一个分支,修复完成之后合并到master分支,并且合并到develop上。

release 分支

release 分支可以称之为预发布的版本。当我们认为develop版本的代码已经趋于成熟,我们可以打一个release分支。在release 分支上测试完成之后,要将代码合并到master分支和develop上。master 分支是线上版本,而合并到develop版本是因为,在测试过程中,一些细节的东西可能会修改,因此这些优化的内容也应该合并到最终版本以及开发版本中。

feature 分支

feature 分支是最经常使用的分支了。当我们收到一个新的开发功能时,应该在develop分支上切出一个feature分支。用来完成新功能的开发,开发完成之后,要合并进develop分支上。

二、 Git Flow 工具的使用

基本上各种git的客户端软件都会支持Git Flow 工作模型。sourcetree 上使用git flow 工作模型就很流畅,体验很好。但是为了全平台上通用,以及理解原理,快速上手。我们来学习下Git Flow 的命令行操作。

git flow 是一种git的使用规范,当然也有相应的工具集,命令行命令让我们使用。

1、起步

安装git flow

brew install git-flow-avh

初始化git flow 工具库

git flow init
之后都按照默认的去配置,直接按enter键继续。

2、feature 分支操作

增加feature新特性分支

适用场景,需要开发新功能

git flow feature start your roverliang/addlist

示例:

roverliang$ git flow feature start roverliang/addlist
Switched to a new branch 'feature/roverliang/addlist' Summary of actions:
- A new branch 'feature/roverliang/addlist' was created, based on 'develop'
- You are now on branch 'feature/roverliang/addlist' Now, start committing on your feature. When done, use: git flow feature finish roverliang/addlist roverliang$ git branch
develop
* feature/roverliang/addlist
master

完成新特性

这个动作执行的是下面的流程:

  • ☆ 合并 addlist 分支到 develop
  • ☆ 删除这个新特性分支
  • ☆ 切换回 develop 分支
git flow feature finish roverliang/addlist

示例:

roverliang$ git flow feature finish roverliang/addlist
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
Already up to date.
Deleted branch feature/roverliang/addlist (was 2e1b475). Summary of actions:
- The feature branch 'feature/roverliang/addlist' was merged into 'develop'
- Feature branch 'feature/roverliang/addlist' has been locally deleted
- You are now on branch 'develop' roverliang$ git branch
* develop
master
roverliang$

获取一个发布的新特性的分支

git flow feature track origin MYFEATURE

3、release 分支操作

准备release 版本

git flow release start RELEASE [BASE]

你可以选择提供一个 [BASE]参数,即提交记录的 sha-1 hash 值,来开启动 release 分支. 这个提交记录的 sha-1 hash 值必须是'develop' 分支下的。

示例:

roverliang$ git branch
develop
feature/test
* master
roverliang$ git log --pretty=oneline -3
2e1b475f9825275aefa0892cfe5259aaac9a3483 (HEAD -> master, origin/test2, origin/master, origin/feature/test, origin/develop, feature/test, develop) delte some content
2d22f306d2dca363b8aaa05743be342a505aabb0 renamed: demo.txt -> test.txt
fbf025e210952c3cdb10e219c4ee5f82b9f36327 modified: demo.txt
roverliang$

发布release 版本

git flow release track RELEASE

完成release 版本

相当于执行以下几个动作:

  • ☆ 归并 release 分支到 'master' 分支
  • ☆ 用 release 分支名打 Tag
  • ☆ 归并 release 分支到 'develop'
  • ☆ 移除 release 分支
git flow release finish RELEASE

3、bugfix 分支操作

紧急修复的需求:

  • ☆ 紧急修复来自这样的需求:生产环境的版本处于一个不预期状态,需要立即修正。
  • ☆ 有可能是需要修正 master 分支上某个 TAG 标记的生产版本。

开始紧急修复,开启hotfix 分支

git flow hotfix start VERSION [BASENAME]

VERSION 参数标记着修正版本。你可以从 [BASENAME]开始,[BASENAME]为finish release时填写的版本号

完成紧急修复

当完成紧急修复分支,代码归并回 develop 和 master 分支。相应地,master 分支打上修正版本的 TAG。

git flow hotfix finish VERSION

本文参考:

Git Flow 工作模型与使用的更多相关文章

  1. git flow 工作流程以及常用命令

    一.分支介绍 master 也是产品分支,只有一个,一般情况下不会在这个分支上进行代码操作 develop 只有一个,新特性的开发是基于 develop 开发的,但是不能直接在 develop 上进行 ...

  2. git flow开发分支管理模型

    Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化 ...

  3. 基于SourceTree 下的 Git Flow 模型

    基于SourceTree 下的 Git Flow 模型 1. sourceTree  是一个开源的git 图形管理工具,可下载mac版本,windows版本 2. Git Flow 是一套使用Git进 ...

  4. 引入git flow分支管理

    git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴.它可以使得版本库的演进保持简洁,主干清晰,各个分支各司其职.井井有条. 先看下Vincent Driessen ...

  5. git flow分支管理

    阅读目录 两种核心分支 三种临时分支 Git Flow流程示例代码 Git Flow工具 分支命名规范 总结 git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴. ...

  6. Git flow的分支模型与及经常使用命令简单介绍

    Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章"A successful Git branching model"对这一分支模型进行 ...

  7. 【技术博客】Git Flow模型管理代码版本

    参考GIT版本管理:Git Flow模型,在此基础上加入了自己的理解,增加人员分工和相应代码,并根据本次项目的实际情况进行相应修改. 在本学期的软件工程开发过程中,我们从alpha阶段就使用了git ...

  8. 基于git的源代码管理模型——git flow

    基于git的源代码管理模型--git flow A successful Git branching model

  9. [GIT] Git 工作流程(Git flow, Github flow flow, Git lab flow)

    reference : http://www.ruanyifeng.com/blog/2015/12/git-workflow.html Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必 ...

随机推荐

  1. java中数据的传递方式到底是怎样的!

    今天早上我了一道有关java的题.主要考点是考java中值得传递方式. 之前我在javaoo里总结的是:基本数据类型中保存的是实际的值,引用数据类型保存的是被引用的内存地址,那么基本数据类型就是按值传 ...

  2. Flux --> Redux --> Redux React 基础实例教程

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

  3. 在ASP.NET MVC使用JavaScriptResult

    本例中,我们尝试把javascript程序搬至控制器中去.更好地在控制器编写程序. 首先来看看原来的写法. 在SepController控制器,添加如下操作: public ActionResult ...

  4. C# 往线程里传参数的方法总结

    Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托.   Thread (ThreadStart) 初始化 ...

  5. Selenium使用总结(Java版本)

    硒在最近的发展中被广泛应用,因为它以前没有被使用过,并且已经走了太多的坑.这是一张唱片. 1.环境配置 配置要点: 1.Web驱动程序应该与浏览器版本相对应,chrome使用chrome驱动程序和ch ...

  6. TCP连接与OKHTTP复用连接池

    Android网络编程(八)源码解析OkHttp后篇[复用连接池] 1.引子 在了解OkHttp的复用连接池之前,我们首先要了解几个概念. TCP三次握手 通常我们进行HTTP连接网络的时候我们会进行 ...

  7. hadoop_批量命令脚本&同步文件脚本

    1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...

  8. HDU4704(SummerTrainingDay04-A 欧拉降幂公式)

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submi ...

  9. nodejs 新建项目

    第一步: 新建工程-->选择nodejs-->creat 注意: 如果出错就使用第二步!! 第二步:建立express 模板的nodejs 点击下图的命令窗口,依次输入下面命令 命令: & ...

  10. JQuery 常用知识

    1.JSON 解析 JSON字符串: var str1 = '{ "name": "deyuyi", "sex": "man&qu ...