理解 Git 分支管理最佳实践

栏目: 编程工具 · 发布时间: 7年前

内容简介:在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途。从上图我们可以看出,我们同时开始了两个功能的开发/研究任务,下面我将以此为基础来讲解分支管理的流程。

原文

理解 Git 分支管理最佳实践

Git 分支有哪些

在进行分支管理讲解之前,我们先来对分支进行一个简单的分类,并明确每一类分支的用途。

分支分类

根据生命周期区分

  • 主分支:master,develop;
  • 临时分支:feature/*,release/*,hotfix/*;

根据用途区分

  • 发布/预发布分支:master,release/*;
  • 开发分支:develop;
  • 功能分支:feature/*;
  • 热修复分支:hotfix/*;

分支的用途

feature/功能名称
release/v+发布的版本号
hotfix/v+bug修复的版本号

Git 分支管理流程

在上一部分,我们已经明确了每个主分支及辅助分支的用途与来源了,下面我们就来详细了解一下 Git 分支管理的整个流程。

先来看一下分支在完整的功能开发中是如何演变的:

理解 Git 分支管理最佳实践

从上图我们可以看出,我们同时开始了两个功能的开发/研究任务,下面我将以此为基础来讲解分支管理的流程。

  1. 先拉取最新的 develop 分支,然后以最新的 develop 为基准创建两个新的功能分支 feature/f1 和 feature/f2;

    git pull origin develop
    git checkout -b feature/f1 develop
    
  2. 开发人员在各自的功能分支上进行开发工作,等当前功能分支开发完之后,将当前分支交由测试人员进行测试,测试过程中的问题修复及功能修改均在当前功能分支上进行;

  3. 当 feature/f1 上的开发及测试任务均完成之后,将 feature/f1 合并回 develop ,并删除 feature/f1 ;

    git checkout develop
    git merge --no-ff feature/f1
    git branch -d feature/f1
    
  4. 从 develop 分支创建新的预发布分支 release/0.2,并部署到预发布环境上测试。在预发布过程中发现问题则直接在 release/0.2 上进行修复;

    git checkout -b release/0.2 develop
    
  5. 在生产环境中发现一个 bug,从 master 上分离出一个热修复分支 hotfix/bug1,并在上面进行修复、测试并在预发布环境中验证,当都验证通过之后将分支重新合并回 develop 及 master,并在 master 上打一个热修复 tag v0.1.1,最后删除 hotfix/bug1;

    git checkout -b hotfix/bug1 master
    ....................
    ....修复bug..ing....
    ....................
    git checkout develop
    git merge --no-ff hotfix/bug1
    git checkout master
    git merge --no-ff hotfix/bug1
    git tag v0.1.1
    git branch -d hotfix/bug1
    
  6. 在 feature/f2 分支上的功能 f2 已经开发并测试完成,然后将 feature/f2 合并回 develop,并删除 feature/f2,此时已经存在新功能 f1 的预发布分支 release/0.2,所以需要等待其发布完成之后才能创建预发布分支 release/0.3;

    git checkout develop
    git merge --no-ff feature/f2
    git branch -d feature/f2
    
  7. 预发布分支 release/0.2 在预发布环境中完全测试通过,随时可以部署到生产环境。但在部署到生产环境之前,需要将分支合并回 develop 及 master,并在 release/0.2 上打一个正式发布版本的 tag v0.2,最后删除 release/0.2;

    git checkout develop
    git merge --no-ff release/0.2
    git checkout master
    git merge --no-ff release/0.2
    git tag v0.2
    git branch -d release/0.2
    
  8. 当前已经不存在 release/* 预发布分支,所以可以开始功能 f2 的预发布上线。创建预发布分支 release/0.3,并部署预发布环境测试;

    git checkout -b release/0.3 develop
    
  9. 分支 release/0.3 测试通过,将 release/0.3 合并回 develop 及 master,然后在 master 上打一个正式发布版本的 tag v0.3,最后删除 release/0.3;

Git Flow

上述过程中未使用到 git flow,均是以约定的规范流程进行,大家可以尝试使用 git flow 来管理分支。

#初始化 git flow
# 设置 feature、release、hotfix、tag 的前缀名
git flow init
 
#开始一个新功能 f1 的开发,以 develop 为基准创建 feature/f1
git flow feature start f1
 
#....................
#....f1 功能开发中....
#....................
 
#新功能 f1 开发完成
# 合并回 develop
# 删除 feature/f1 分支
git flow feature finish f1
 
#开始新功能 f1 的预发布验证,版本定为 0.2
git flow release start 0.2
 
#新功能 f1 预发布验证通过
# 合并到 master 分支
# 在 release 上打 tag v0.2
# 将 tag v0.2 合并到 develop 分支
# 删除 release/0.2 分支
git flow release finish 0.2
 
#开始 bug1 的修复,以 master 为基准创建 hotfix/bug1
git flow hotfix start 0.2.1
 
# bug1 修复完成
# 合并到 master 分支
# 在 hotfix 上打 tag v0.2.1
# 将 tag v0.2.1 合并到 develop 分支
# 删除 hotfix/0.2.1 分支
git flow hotfix finish 0.2.1

至此,Git 分支管理的整个流程已经讲解完,有兴趣的可以看一下具体的 分支管理演示 https://github.com/alienwow/gitbranchmanage 。 

如果有上述讲解中任何不正确的地方,欢迎大家批评指正,如有疑问欢迎一起讨论。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing for Emotion

Designing for Emotion

Aarron Walter / Happy Cog / 2011-10-18 / USD 18.00

Make your users fall in love with your site via the precepts packed into this brief, charming book by MailChimp user experience design lead Aarron Walter. From classic psychology to case studies, high......一起来看看 《Designing for Emotion》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换