不知道 git-flow 工作流怎么样?

901 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情 

Git-flow 介绍

git 工作流之一

0. 什么是 git-flow

  1. 基于 git 产生的一套 git,把标准的 git命令用脚本组合起来
  2. git-flow 并不是要替代 git,把标准的git命令用脚本组合了起来
  3. 大白话 使用 git-flow 一条命令、能够做 git 5条命令的事,从而简化了git 操作

1. 问题

在团队使用 Git 的过程中,每个开发成员对 Git 的用法、操作流程都可能会不一样,每个人提交了一堆杂乱无章的 commit,沟通协作会变得困难,也会产生各种提交和发布问题,项目变得难以协调和维护。

  1. 分支的操作、合并、提交太繁琐
  2. 分支的命名不规范、会造成项目以后很难进行维护

2. 方案

Gitflow 其实是一个 Git 的操作规范,用来让分支管理变得条理更清晰。

它使用了固定的 5 类分支,限制每类分支的职责、创建方式、合并方式等,让版本管理变得更规范。

Gitflow 规范下每个仓库应包含的 5 类分支:

1.生产分支:master/main

表示最近发布到生产环境的代码(即最近发布的 release)。

  • 它的内容只能来源于对其他分支的合并(比如 release、hotfix),不能直接在它上面修改
  • 每次有代码合并到 master,都应该创建一个新 Tag

2.开发分支:develop

表示主开发分支,包含所有要发布到下一个 release 的代码。

  • 它基于 master 分支创建
  • 它的内容主要来源于合并其他分支(比如 feature、release、hotfix)

image-20211101165351379.png

3. 功能分支:feature (s)

表示开发每一个新功能的代码。

  • 它基于 develop 分支创建
  • 当开发完成后,它将会被合并到 develop 分支
  • 合并后该分支可删除!

image-20211101165539635.png 4.发布分支:release (s)

表示每一次发布工作的代码。

  • 它基于 develop 分支创建
  • 新的 release 分支创建后,可以在它上面测试和修改发现的 bug
  • 当发布完成后,它将被合并到 master 和 develop 分支(同时要在 master 分支上创建 Tag)
  • 合并后该分支可删除

image-20211101165604228.png

5. 热补丁分支:hotfix (s)

表示对生产环境中发现的 bug 的修复代码。

  • 它基于 master 分支创建
  • 当问题修复后,它将被合并到 master 和 develop 分支(同时要在 master 分支上打 Tag)
  • 合并后该分支可删除

image-20211101165938610.png

Git-flow 操作流程

正确使用 gitflow 进行分支管理的操作流程

核心内容:

  1. 从只有一个 master 分支的仓库开始,操作其他几类分支场景的流程

创建 develop 分支

git branch develop  
git push -u origin develop

开始开发一个新功能

# 基于 develop 创建一个 feaeure 分支
git checkout -b feature_a develop
git push -u origin feature_a    
​
# 提交功能代码 
git status
git add .
git commit   

完成一个新功能的开发


# 拉取远程 develop 最新代码
git pull origin develop
​
# 切换到 develop 分支
git checkout develop 
​
# 将 feature 合并到 develop
# --no-ff:不使用fast-forward方式合并,保留分支的commit历史
# --squash:使用squash方式合并,把多次分支commit历史压缩为一次
git merge --no-ff feature_a
​
# 推送到远程
git push origin develop
​
# 删除本地和远程的 feature 分支
git branch -d feature_a
git push origin --delete feature_a

开始发布


# 基于 develop 创建一个 release 分支
git checkout -b release_0.1.0 develop

完成发布


# 将 release 合并到 master
git checkout master
git merge --no-ff release_0.1.0
git push# 将 release 合并到 develop
git checkout develop
git merge --no-ff release_0.1.0
git push# 删除本地和远程的 release 分支
git branch -d release_0.1.0
git push origin --delete release_0.1.0   
​
# 打上 Tag 标签
git tag -a v0.1.0 master
git push --tags

开始修改线上 Bug


# 基于 master 创建 hotfix
git checkout -b hotfix_0.1.1 master

完成线上 Bug 修复


# 切换到 master
git checkout master
​
# 将 hotfix 合并到 master
git merge --no-ff hotfix_0.1.1
git push# 将 hotfix 合并到 develop
git checkout develop
git merge --no-ff hotfix_0.1.1
git push# 删除本地和远程的 hotfix 分支
git branch -d hotfix_0.1.1
git push origin --delete  hotfix_0.1.1# 打上新的 Tag
git tag -a v0.1.1 master
git push --tags

市面上也存在一些能简化以上操作的工具,让我们少敲命令。比如:git-flow 扩展插件

git-flow初始化

1安装 git-flow

注意:`不需要安装`

2在项目中初始化 git-flow

  • 在输入命令执行一个,会显示交互式的提问(设置)

     git flow init
    

    1659076879879.png

  • 这个设置就是对 Git 分支名进行的管理,全部使用默认的即可

  Branch name for production releases: 项目主分支名字是什么 (master)

  Branch name for "next release" development: 开发基准分支名字是什么 (develop)

  Feature branches :功能分支需要以什么开头 (feature/)

  Bugfix branches:开发基准分支产生了 Bug,需要创建分支修复,分支的名字以什么开头 (bugfix/)

  Release branches:预发布环境的分支以什么名字开头 (release/)

  Hotfix branches:master 分支出现错误一个,Bug 分支应该以什么开头命名 (hotfix/)

3 GitFlow 使用流程

  • 如何使用 git-flow 创建一个功能分支

     创建功能分支: git flow feature start xxx 
        ​
     ## 当输入下面这条命令一个,分支会自动合并到 develop,
     完成功能分支: git flow feature finish xxx 
    
  • 如何使用 git-flow 创建一个 develop bug 修复分支

      ### 创建 bugfix 修复分支: 
      git flow bugfix start xxx 
        
      ### 完成 bugfix 修复分支:
      git flow bugfix finish xxx 
    
  • 如何使用 Git-flow 创建一个 release 分支

    当 develop 包含所有的功能,并且 Bug 被完全修复了,这时候需要进行上线但是在上线之前需要进行最后一轮测试,这时候需要创建 release 分支,这个分支需要基于 develop 进行创建

    ##创建 release 预发布分支:
        git flow release start 项目的版本号,1.0.0 
        
    ##完成 release 预发布分支: 
        git flow release finish 项目的版本号,1.0.0 
    
  • 如何使用 Git-flow 创建一个 hotfix 分支

    当代码合并到 master 以后,发现了 bug,这时候需要创建 hotfix 分支修复 bug,既然 master 有错误,说明 develop 也有错误,所以我们在创建好分支,修复好 bug 以后,需要将代码分别合并到 master、develop

    ###创建 hotfix 修复分支:
    git flow hotfix start xxx 
        
    ###完成 hotfix 修复分支:
    git flow hotfix finish xxx