我理解的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

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