我理解的Git Flow

作者: 华枯荣 | 来源:发表于2015-12-04 20:49 被阅读678次

Git FLow是什么

Git Flow是构建在Git之上的一个组织软件开发活动的模型,也是软件开发过程中一种成功的分支管理策略。它的核心思想是利用成功的分支管理策略,管理软件的开发过程。

2010年5月,nvie 在他的“A successful Git branching model”一文中,介绍了这种模型,并将其命名为Git Flow。而且,他还为这种分支策略开发了一套Git扩展工具,我们可以在Git中,使用专属的分支管理命令操作分支。

因此,Git Flow 是一种软件开发模型,由一种分支管理策略,和一套与之配套的Git扩展工具组成。

下面这张图,形象的展示了Git Flow的全貌:

Git Flow中的分支

根据Git Flow的思想,开发人员需要合理的利用Git的分支功能,来管理软件的开发流程。因此,Git FLow模型定义了五种标准的分支,并且让它们各司其职,分别是:master分支,develop分支,feature分支,hotfix分支和release分支。

这五种分支又可分为两大类:主要分支辅助分支。主要分支,包括master分支和develop分支。辅助分支,包括feature分支,hotfix分支和release分支。

实质上,Git Flow就是要求开发者使用这五种标准的分支管理软件开发流程

主要分支

主要分支只用于与软件测试、部署、发布相关的活动,不会涉及任何的软件开发活动。主要分支会一直存在,是所有其他分支的源头,也是它们最终的归宿。

  • master

    master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。它是源头中的源头,归宿中的归宿。它只用于新版本的发布,不涉及一切与软件开发、测试、部署有关的操作。
  • develop

    develop分支fork自master分支,主要用于开发工作。开发新功能时,从develop分支拉出feature分支。新功能开发完成后,再把feature分支合并到develop分支。可见,develop分支是一个承上启下的分支。

辅助分支

辅助分支主要用于具体的软件开发工作,包括新功能的开发、Bug修复和发布前的准备工作。辅助分支不是一直存在的,当它们被合并到主要分支后,会被删除掉。

  • feature

    开发者不能直接在master分支和develop分支上做开发工作,这样可能会污染软件的版本库。Git Flow要求从develop分支上引出一条feature分支,专门做具体的开发工作。每个开发者都可以从develop分支上引出自己的feature分支,并且这个feature分支是开发者私有的,可以不必提交到版本库中。开发完成后,把所有的feature分支都合并到develop分支上,然后把feature分支删掉。如果新功能被砍掉了,也可以直接删掉feature分支。

  • hotfix

    当线上产品遇到了严重Bug,或者发现了紧急的缺陷,不得不立即修复时,就可以从master分支引出一条hotfix分支。问题解决后,再把hotfix分支合并到master分支和develop分支,最后删除掉这个hotfix分支。
    这样做的好处是使Bug修复与新功能开发完全分离开,保证开发工作不受到影响。

  • release

    当新功能开发完,代码都合并到develop分支后,就可以为新版本发布做准备了。但是如果这时有新的开发任务到来,或者又有新的分支需要合并,而此时的develop分支又没有准备好合并到master分支时,那么就可以从develop分支引出一条release分支作为过渡。在release分支上,完成发布前的准备工作,然后合并到master分支和develop分支,最后删除release。
    release分支可以使develop分支解放出来,尽早的投入到下一版本的开发中。

Git FLow的使用方式

  • 使用原生的Git命令

    Git Flow本质上就是对git分支的利用,所以用原生的git分支命令就可以操作。
    • 创建分支
      从当前分支上引出新的分支

        git branch branch_name
      
    • 切换分支

        git checkout branch_name
      
    • 创建并切换分支

        git checkout -b branch_name
      
    • 合并分支
      把其他分支合并到当前分支

        git merge --no-ff -m "comment" branch_name
      
    • 删除分支

      • 要想删除一个分支,必须在已经合并了那个分支的分支上执行删除操作。

          git branch -d banch_name
        
      • 强制删除一个分支

          git branch -D branch_name
        
    • 查看所有分支

        git branch
      
    • 如果本地没有远程仓库的某个分支,把远程分支拉取到本地,并且建立连接

        git checkout -b branch_name orign/branch_name
      
    • 从远程分支更新本地分支

        git pull
      
    • 推送分支到远程分支
      把本地分支的更新推送到远程分支(需要先建立连接);或者在远程仓库�没有此分支时,把本地分支�推送到远程仓库

        git push origin branch_name
      
    • 使本地分支与远程分支建立连接

        git branch --set-upstream branch_name origin/branch_name
      
  • 删除远程仓库的分支

         git push origin --delete branch_name
    
  • 使用 nvie 开发的Git Flow工具

    nvie为Git Flow提供了一套命令行工具,使用它可以更方便的操作Git Flow.
    • 初始化Git Flow

        git flow init
      
      • 在一个git仓库中初始化git flow,会弹出一系列提示信息,跟着做就行了
      • 在一个非git仓库的文件夹中初始化,会创默认建好需要的分支,没有任何提示
    • 创建feature/release/hotfix/support分支
      初始化Git Flow会自动创建/指定主要分支,但辅助分支需要开发者手动创建。

      • 查看/创建/完成feature分支

          git flow feature
          git flow feature start feature_branch_name
          git flow feature finish feature_branch_name
        

        start命令,会创建一个新的feature分支;finish命令,会自动合并feature分支到develop分支和master分支,并删除feature分支。

      • push/pull一个feature分支到远程仓库

          git flow feature publish feature_branch_name
          git flow feature pull origin feature_branch_name
        
      • 其他分支 - hotfix/release/support分支的操作与feature分支基本相同,直接去参考官方文档吧。

参考文献:

  1. 基于git的源代码管理模型——git flow
  2. Git 常用命令和 Git Flow 梳理
  3. Git flow 分支策略
  4. Git Flow在github的主页
撤销更改

git checkout -- file 在加入到暂存区之前,遗弃修改
git reset HEAD file 在提交之前,遗弃暂存区的更改
git reset --hard HEAD^ 回退到上一版本
git reset --hard commit_id 回退到指定的版本

操作文件

git mv file newfile 重命名,文件名不区分大小写
git rm file 删除文件
git remote rename repo new_repo 重命名远程仓库

相关文章

  • 我理解的Git Flow

    Git FLow是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,也是软件开发过程中一种成功...

  • git-flow使用指南

    git-flow使用指南 1.简介 git-flow是基于Git Flow工作流模型的工具,了解Git Flow ...

  • Git 管理工具 Tower 的使用

    创建 git flow 点击 Git-Flow -> Enable Git-Flow 按钮 点击 configur...

  • 实习第一天,上司让我学习一下Git Flow

    简述Git Flow 首先,Git Flow并不是Git的替代品,Git Flow只是把标准的Git命令用脚本组合...

  • git分支管理与使用规范

    git分支管理与使用规范 分支管理 flow git flow github flow gitlab flow f...

  • git-flow

    git-flow git-flow 应该是目前流传最广的 Git 分支管理实践。git-flow 围绕的核心概念是...

  • Git 分支管理 git-flow

    git-flow git-flow 应该是目前流传最广的 Git 分支管理实践。git-flow 围绕的核心概念是...

  • GitFlow讲解

    Git Flow 工作流程 1.Git Flow是什么它解决了哪些问题: 2.Git Flow安装: 3.Git ...

  • Git工作流

    一、Git常见工作流 Git三种常见的工作流:Git Flow、GitHub Flow 、GitLab Flow ...

  • 一周学习精选(2018-10-27)

    使用 git-flow 管理分支 Using git-flow to automate your git bran...

网友评论

    本文标题:我理解的Git Flow

    本文链接:https://www.haomeiwen.com/subject/ugvshttx.html