Git flow的基本概念以及使用

Git flow的基本概念以及使用

git flow的概念


git flow的基本概念

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

简单来说就是通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。

git flow的常用分支

Git flow的基本概念以及使用

根据Git Flow 的规范,我们要将Git 的分支分为 master 、develop 、hotfix 、release、feature这五个分支。

主要功能

Git flow的基本概念以及使用

  1. master 分支:用于存放对外发布的版本,任何时候获取到的都是稳定的已发布的版本。
  2. develop分支 :用于日常开发,存放最新的开发版。
    feature分支 :可以存在多个,基于develop分支被创建,一般根据所需开发的功能来命名分支,每一个新的功能可以创建一个新的分支,开发结束后,需要将其合并到develop上
  3. hotfix 分支:hotfix 分支用来修复生产中的紧急bug,由于develop分支尚处于开发过程中,代码不稳定,不能直接应用于生产
  4. release 分支:release 分支可以称之为预发布的版本。当我们认为develop版本的代码已经趋于成熟,我们可以打一个release分支。在release 分支上测试完成之后,要将代码合并到master分
  5. develop上。master 分支是线上版本,而合并到develop版本是因为,在测试过程中,一些细节的东西可能会修改,因此这些优化的内容也应该合并到最终版本以及开发版本中。
注意事项:
  1. 所有开发分支从 develop 分支拉。
  2. 只要有合并到 master 分支的操作,都需要和 develop 分支合并下,保证同步。
  3. master 和 develop 分支是主要分支,主要分支每种类型只能有一个,派生分支每个类型可以同时存在多个。

git flow和git的区别

  1. feature分支开发完成后,暂时不合并至develop,而是基于develop开启release分支,将feature分支合并到release分支,进行测试;
  2. release分支测试通过后,部署到生产环境,将release分支代码合并到develop分支与master分支,并在master分支打一个tag;

git的使用


安装

在git bash中输入:git clone --recursive git://github.com/nvie/gitflow.git d:\gitflow(指定git flow 安装目录)
进入gitflow\contrib路径下,执行:msysgit-install.cmd d:\git(git的安装目录)

打开Git Bash命令窗口,执行git flow

常用命令 (fbn:featureBranchName)
命令 含义
git flow init 初始化一个现有的 git 库,设置初始参数建议用默认值
git flow feature start [fbn] 创建一个基于’develop’的feature分支,并切换到这个分支之下
git flow feature finish [fbn] 完成开发新特性, 合并 MYFEATURE 分支到 ‘develop’, 删除这个新特性分支, 切换回 ‘develop’ 分支。
git flow feature publish [fbn] 发布新特性分支到远程服务器,也可以使用git的push命令
git flow feature pull origin [fbn] 取得其它用户发布的新特性分支,并签出远程的变更。也可以使用git的pull命令
git flow feature track [fbn] 跟踪在origin上的feature分支
git flow release start [releasebn] 开始准备release版本,从 ‘develop’ 分支开始创建一个 release 分支
git flow release publish [releasebn] 创建 release 分支之后立即发布允许其它用户向这个 release 分支提交内容
git flow release track[releasebn] 签出 release 版本的远程变更
git flow release finish [releasebn] 归并 release 分支到 ‘master’ 分支,用 release 分支名打 Tag,归并 release 分支到 ‘develop’,移除 release 分支
git flow hotfix start [hotfixbn] 开始 git flow 紧急修复,从master上建立hotfix分支
git flow hotfix finish [hotfixbn] 结束 git flow 紧急修复,代码归并回 develop 和 master 分支。相应地,master 分支打上修正版本的 TAG。
新功能开发工作流
  1. 切换到本地仓库工作区
    cd /workspace
  1. 从远程仓库克隆代码到本地仓库
    git clone
    基于master分支,创建develop分支 切换到master分支
    $git checkout master
    基于master分支克隆develop分支,并在克隆完毕后直接跳转到develop分支
    $git checkout -b develop
    推送develop分支到远程仓库
    $git push origin develop

注:编码工作主要在develop分支,master分支主要用来发布稳定版本

  1. 在本地仓库的开发流程
    John
    提交修改到缓冲区 $git add .
    提交修改到本地仓库 $git commit -m “修改说明”
    每完成一个功能点可以对代码进行打包 $git tag -m “简要说明增加/修复/删除了什么功能”

注:不是每一个Tag都需要提交到远程仓库,比如可以在完成一个功能点的编码工作后未编译就打一个包,仅存储于本地仓库,在编译成功&测试通过后,再打一个新的Tag包(里程碑Tag包),仅将里程碑Tag包推送到远程仓库

  1. 推送代码到远程仓库
    执行代码拉取操作,防止代码冲突
    $git pull
    解决代码冲突后,推送代码到远程仓库
    $git push origin develop

注:禁止将未编译或编译不通过的代码提交到远程仓库,如果编码工作进行未完成可以提交到本地仓库中,等待该功能点全部实现后再将代码推送到远程仓库中。

  1. 将代码发布到测试分支
    $git checkout develop
    $git checkout -b release
    $git push origin release
  1. 测试工作完成后,合并代码到develop分支
    切换到develop分支 $git checkout develop
    执行合并操作,将release分支代码合并到develop分支 $git merge release
    如果合并报错,则解决冲突,冲突解决后继续再次执行合并
    测试工作完成后,合并代码到develop分支
  1. 开发工作和测试工作都完毕后,发布时将develop分支合并到主线
    $git checkout master
    $git merge develop
  1. 开发工作和测试工作都完毕后,发布时将develop分支合并到主线
    $git checkout master
    $git merge develop