1-概述

学会使用 Git 的同时, 也得学会使用 GitFlow, GitFlow 是建立在 Git 的基础之上, 对 Git 命令进行了一次封装.

大多数开发人员使用的 Git 时, 顶多有三个分支: 一个是 master, 一个是 develop, 再就是在 develop 分支上拉出来的开发分支, 或者就是直接在 master 分支上拉出一个分支进行开发.

这样开发比较快速, 对于小团队来说, 已经满足了. 但是随着团队人数的增多, 项目越做越大, 就会出现各种各样的问题, 首当其冲的就是代码功能分布杂乱.

就像代码需要代码规范一样, 代码管理同样需要一个清晰的流程和规范, 这就是 GitFlow.

2-GitFLow分支介绍

一张图让你对 GitFlow 有一个认识:

下面是我对每个分支的理解.

2.1-master 分支

这个分支就是生产分支, 只有 hotfix 分支和 release 分支的代码可以合并进来, 每一次合并都会打一个 tag.

2.2-develop 分支

这个分支是基于 master 创建的, 包含所有下一个 release 分支的代码.

2.3-feature 分支

这个分支是从 develop 分支创建的, 主要用于开发新的功能, 如果功能要发布了, 则合并到 develop 分支.

2.4-release 分支

这个分支是基于 develop 分支创建的, 创建出 release 分支之后, 部署到测试环境, 测试人员进行测试, 如果有问题, 直接在 release 分支上进行修改, 然后合并到 develop 分支, 每一次修改都需要合并待 develop 分支.

如果测试通过, 该分支的使命结束, 将 release 分支的代码分别合并到 master 分支和 develop 分支.

2.5-hotfix 分支

如果 master 版本出现 bug 时, 从 master 上拉取一个 hotfix 分支, 完成 hotfix 后, 合并到 master 分支和 develop 分支.

3-GitFlow命令

简单说, GitFlow 就是把平时我们使用的 git 命令合并起来执行, 本质上可以直接使用普通的 git 命令进行类似 gitflow 的分支管理.

3.1-初始化

使用 git flow init 在现有的 Git 项目中进行初始化, 如果远端有 develop 分支, 需要将本地刚刚初始化的分支和远端相关联(git branch --set-upstream-to=origin/develop develop), 然后拉取远端的代码.

如下:

➜ gitflow git:(master) git flow init

Which branch should be used for bringing forth production releases?
- master
Branch name for production releases: [master]
Branch name for "next release" development: [develop] How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

执行完之后, 默认使用 master 作为生产分支, 然后在本地创建一个 develop 分支并切换过去, 然后设置每个特征分支的前缀, 默认即可.

之后我们将 develop 分支推上去(git push -u origin develop).

3.2-feature分支

# 创建一个 feature 分支
git flow feature start feature01 # 推送本地 feature 分支到远端
git flow feature publish feature01 # 拉取远端的 feature 分支到本地
git flow feature pull origin feature01
git flow feature track feature01 # 完成 feature 分支
git flow feature finish feature01

无论在哪个分支上执行 start, 新创建的 feature 分支总是基于 develop 分支进行创建.

无论在哪个分支上执行 finish, 命令执行结束后, feature 分支会被合并到 develop 分支, 然后 feature 分支会被自动删除.

3.3-release分支

# 创建一个 release 分支, 后面的 base: 即提交记录的 sha-1 hash 值, 这个值必须是 develop 分支下的
git flow release start release01 [base] # 推送本地 release 分支到远端
git flow release publish release01 # 拉取远端的 release 分支到本地
git flow release pull origin release01
git flow release track release01 # 完成 release 分支
git flow release finish release01

无论在哪个分支上执行 start, 新创建的 release 分支总是基于 develop 分支进行创建.

无论在哪个分支上执行 finish, 命令执行结束后, release 分支会被合并到 develop 分支和 master 分支, 然后在 master 分支上打一个 tag, 最后 release 分支被删除.

最后不要忘记 push tag(git push --tags).

3.4-hotfix分支

# 创建一个 hotfix 分支
git flow hotfix start hotfix01 # 完成一个 hotfix 分支
git flow hotfix finish hotfix01

无论在哪个分支上执行 start, 新创建的 hotfix 分支总是基于 master 分支进行创建.

无论在哪个分支上执行 finish, 命令执行结束后, hotfix 分支会被合并到 master 分支, 然后在 master 分支上打一个 tag, 然后 hotfix 分支又合并到了 develop 分支, 最后 hotfix 分支被删除了.

最后不要忘记 push tag(git push --tags).

3.5-support分支

support 功能只是测试版本, 不建议使用.

3.6-tag

4-安装GitFlow

4.1-Mac

brew install git-flow

4.2-CentOS

yum install -y epel-release
yum install -y gitflow

4.3-Ubuntu

apt-get install git-flow

5-客户端工具

当然是 SourceTree.

并不推荐使用客户端工具, 多敲键盘少用鼠标.

6-参考资料

  1. http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html
  2. https://www.cnblogs.com/wish123/p/9785101.html
  3. https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow

GitFlow入门的更多相关文章

  1. android 开发从入门到精通

    Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...

  2. 学习笔记之Git / Gitflow / TortoiseGit

    Git - Wikipedia https://en.wikipedia.org/wiki/Git Git (/ɡɪt/) is a version control system for tracki ...

  3. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  6. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  7. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  8. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  9. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

随机推荐

  1. 2.ibatis执行流程解析

    以下仅为个人理解,如有问题,欢迎指正

  2. IIS7 部署MVC 运行不了 注意事项

    经常安装完iis7或者7.5后,部署MVC3.运行后提示 403 找不到目录. 解决办法:需要重新注册下iis C:\Windows\Microsoft.NET\Framework64\v4.0.30 ...

  3. javascript之String对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 如何选择K-Means中K的值

    K-Means需要设定一个簇心个数的参数,现实中,最常用于确定K数的方法, 其实还是人手工设定.例如,当我们决定将衣服做成几个码的时候,其实就是在以 人的衣服的长和宽为为特征进行聚类.所以,弄清楚我们 ...

  5. JS原生上传大文件显示进度条-php上传文件

    JS原生上传大文件显示进度条-php上传文件 在php.ini修改需要的大小: upload_max_filesize = 8M    post_max_size = 10M    memory_li ...

  6. dbgrid中移动焦点到指定的行和列

    dbgrid是从TCustomGrid继承下来的,它有col与row属性,只不过是protected的,不能直接访问,要处理一下,可以这样:TDrawGrid(dbgrid1).row:=row;TD ...

  7. 使用robotframework做接口测试之一——准备工作

    最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...

  8. 使用shell脚本常见的一些问题

    Jdk版本:jdk-8u102-linux-x64 Tomcat版本:apache-tomcat-7.0.92 Redis版本:redis-5.0.0 由于公司项目的需要,要在多台服务器上面部署一些应 ...

  9. 关于组播数据包“发不出去",c#无法接收

    问题一:发不出去 最近做一个小东西改进方案需要用到组播,简单来说就是我先作为服务器端组播发送设备编号,然后组播成员作为客户端接收消息后先确认对方是不是在呼叫我.是的话就返回一个消息,这样我服务器端就可 ...

  10. 手写LVQ(学习向量量化)聚类算法

    LVQ聚类与k-means不同之处在于,它是有标记的聚类,设定带标签的k个原型向量(即团簇中心),根据样本标签是否与原型向量的标签一致,对原型向量进行更新. 最后,根据样本到原型向量的距离,对样本进行 ...