注:master分支正在被main分支取代。

简介

Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。

gitflow示意图

gitlab的流水线有失败_gitlab的流水线有失败

Git Flow常用分支

master:

  • master分支存放的是随时可供在生产环境中部署的稳定版本代码
  • master分支保存官方发布版本历史,release tag标识不同的发布版本
  • 一个项目只能有一个master分支
  • 仅在发布新的可供部署的代码时才更新master分支上的代码
  • 每次更新master,都需对master添加指定格式的tag,用于发布或回滚
  • master分支是保护分支,不可直接push到远程仓master分支
  • master分支代码只能被release分支或hotfix分支合并

develop:

  • develop分支是保存当前最新开发成果的分支
  • 一个项目只能有一个develop分支
  • develop分支衍生出各个feature分支
  • develop分支是保护分支,不可直接push到远程仓库develop分支
  • develop分支不能与master分支直接交互

feature:

  • 分支的命名格式必须功能名,例如v1.0.0-login,login-20201109,
  • 以功能为单位从develop拉一个feature分支
  • 每个feature分支颗粒要尽量小,以利于快速迭代和避免冲突
  • 当其中一个feature分支完成后,测试通过,合并回develop分支
  • 当一个功能因为各种原因不开发了或者放弃了,这个分支直接废弃,不影响develop分支
  • feature分支只与develop分支交互,不能与master分支直接交互

release:

  • 命名规则:release/,“”以本次发布的版本号为标识
  • release分支主要用来为发布新版的测试、修复做准备
  • 当需要为发布新版做准备时,从develop衍生出一个release分支
  • release分支可以从develop分支上指定commit派生出
  • release分支测试通过后,合并到master分支并且给master标记一个版本号
  • release分支一旦建立就将独立,不可再从其他分支pull代码
  • 必须合并回develop分支和master分支

hotfix:

  • 命名规则:hotfix/,“”以本次发布的版本号为标识
  • hotfix分支用来快速给已发布产品修复bug或微调功能
  • 只能从master分支指定tag版本衍生出来
  • 一旦完成修复bug,必须合并回master分支和develop分支
  • master被合并后,应该被标记一个新的版本号
  • hotfix分支一旦建立就将独立,不可再从其他分支pull代码
gitflow角色介绍:
  • 功能开发者:模块中功能分支的开发;
  • 测试管理员:测试团队担当;
  • 项目管理员:项目开发组长(team leader)担当;
分支说明

名称

说明

命名规范

命名示例

合并目标

合并操作

操作者

master

线上稳定版本

master

master

回合develop


项目管理员

release

待发布分支,下个版本需上线的版本

release/xxx

release/v1.0.0

master/develop

merge request

项目管理员

develop

当前正在开发的分支

develop

develop

release

merge request

功能开发者/测试管理员

feature

功能分支,每个功能需分别建立自己的子分支

feature/版本号(日期)-功能名

feature/v1.0.0-Login

develop

merge request

功能开发者

hotfix

紧急修复分支

hotfix/xxx

hotfix/v1.0.1

master/develop

merge request

功能开发者

gitflow代码示例
创建develop分支
git branch develop
git push -u origin develop
开始新Feature开发
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature    
# 做一些改动    
git status
git add some-file
git commit
完成Feature
git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop
# 删除Feature分支,建议保留
git branch -d some-feature

# If you pushed branch to origin:
git push origin --delete some-feature
开始Relase
git checkout -b release-0.1.0 develop
完成Release
git checkout master
git merge --no-ff release-0.1.0
git push

git checkout develop
git merge --no-ff release-0.1.0
git push
# 删除Feature分支,建议保留
git branch -d release-0.1.0
# If you pushed branch to origin:
git push origin --delete release-0.1.0   
git tag -a v0.1.0 master
git push --tags
开始Hotfix
git checkout -b hotfix-0.1.1 master
完成Hotfix
git checkout master
git merge --no-ff hotfix-0.1.1
git push
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
# 删除Feature分支,建议保留
git branch -d hotfix-0.1.1
git tag -a v0.1.1 master
git push --tags
Git flow工具

OS X: brew install git-flow

Linux: apt-get install git-flow

Windows: wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

使用
  • 初始化: git flow init
  • 开始新Feature: git flow feature start MYFEATURE
  • Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
  • 获取Publish的Feature: git flow feature pull origin MYFEATURE
  • 完成一个Feature: git flow feature finish MYFEATURE
  • 开始一个Release: git flow release start RELEASE [BASE]
  • Publish一个Release: git flow release publish RELEASE
  • 发布Release: git flow release finish RELEASE别忘了git push --tags
  • 开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
  • 发布一个Hotfix: git flow hotfix finish VERSION
结语

规矩是死的人是活的,当你对git非常熟悉之后,在不同的项目开发中可以灵活的使用git管理。每家公司对自己的git也可能有自己的一套管理规范。注意不要 删库跑路