携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
Git-flow 介绍
git 工作流之一
0. 什么是 git-flow
- 基于 git 产生的一套
git
,把标准的git
命令用脚本组合起来 git-flow
并不是要替代git
,把标准的git
命令用脚本组合了起来大白话
使用git-flow
一条命令、能够做git
5条命令的事,从而简化了git
操作
1. 问题
在团队使用 Git 的过程中,每个开发成员对 Git 的用法、操作流程都可能会不一样,每个人提交了一堆杂乱无章的 commit
,沟通协作会变得困难,也会产生各种提交和发布问题,项目变得难以协调和维护。
- 分支的操作、合并、提交太繁琐
- 分支的命名不规范、会造成项目以后很难进行维护
2. 方案
Gitflow
其实是一个 Git 的操作规范,用来让分支管理变得条理更清晰。
它使用了固定的 5 类分支,限制每类分支的职责、创建方式、合并方式等,让版本管理变得更规范。
Gitflow 规范下每个仓库应包含的 5 类分支:
1.生产分支:master/main
表示最近发布到生产环境的代码(即最近发布的 release)。
- 它的内容只能来源于对其他分支的合并(比如 release、hotfix),不能直接在它上面修改
- 每次有代码合并到 master,都应该创建一个新 Tag
2.开发分支:develop
表示主开发分支,包含所有要发布到下一个 release 的代码。
- 它基于 master 分支创建
- 它的内容主要来源于合并其他分支(比如 feature、release、hotfix)
3. 功能分支:feature (s)
表示开发每一个新功能的代码。
- 它基于 develop 分支创建
- 当开发完成后,它将会被合并到 develop 分支
- 合并后该分支可删除!
4.发布分支:
release (s)
表示每一次发布工作的代码。
- 它基于 develop 分支创建
- 新的 release 分支创建后,可以在它上面测试和修改发现的 bug
- 当发布完成后,它将被合并到 master 和 develop 分支(同时要在 master 分支上创建 Tag)
- 合并后该分支可删除
5. 热补丁分支:hotfix (s)
表示对生产环境中发现的 bug 的修复代码。
- 它基于 master 分支创建
- 当问题修复后,它将被合并到 master 和 develop 分支(同时要在 master 分支上打 Tag)
- 合并后该分支可删除
Git-flow 操作流程
正确使用 gitflow 进行分支管理的操作流程
核心内容:
- 从只有一个 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
-
这个设置就是对 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