工作总结-Gitflow工作流总结

git flow实践

什么是git flow

git-flow是最早诞生、并得到广泛采用的一种工作流程,主要特点如下:

  1. 存在两个长期分支
    1. 主分支(master)
    2. 开发分支 (develop)
  2. 存在三种短期分支
    1. 功能分支(feature branch)
    2. 补丁分支(hotfix branch)
    3. 预发分支(release branch)

安装git flow

安装依赖包(mac)

brew install git-flow

配置zsh(增加自动补全命令)

open ~/.zshrc

plugins=(git git-flow git-flow-completion python svn xcode ruby perl)

git flow 分支简介

分支 描述
master/production 分支生产环境代码,线上稳定版本,只能从其他分支合并,不能提交修改,必须打tag
develop 分支主要开发分支,在此分支派生出feature或bugfix分支
feature/bugfix 分支基于dev分支创建,开发独立的功能或模块,完成后合并到dev分支
release 基于dev分支创建,用于测试和bug修复
hotfix hotfix分支基于Master分支创建,紧急修复线上的bug,开发完后需合并到master和develop分支,同时在master上打一个tag

git flow 工作流总览

image.png

image.png

git flow 实践指令

git flow 初始化

git flow init

功能开发feature

  • 创建功能

git flow feature start feature-name

  • 完成功能

git flow feature finish feature-name

1
这个命令会把我们的修改整合到develop分支中去,之后,git-flow会进行清理操作,它会删除当前已完成的功能分支,并且切换到develop分支。

release管理(基于develop分支)

  • 判定develop分支是否为一个成熟的release版本的条件:
    1. 已完成所有新功能和必要的修复
    2. 已经被彻底测试过了
  • 创建release:release分支使用版本号命名

git flow release start 1.1.1

  • 完成release

git flow release finish 1.1.1

1
之后git-flow会拉取远程仓库,保证当前是最新的,然后release会被分别合并到master和develop,最后分支清除,回master。

hotfix(基于master分支)

  • 创建hotfix

git flow hotfix start missing-something

  • 完成hotfix

git flow hotfix finish missing-something

1
这个过程类似发布release,完成后改动会被同时合并入master和develop,然后hotfix分支会被删除,然后重新切换回develop分支。

git flow 源码泛读

好像是php写的,php不会,但是加上注释勉强能理解。如果说错了,望指正。源码地址:gitflow

Init

git flow init

  • 初始化配置,并将配置写入配置文件

image.png

  • 按项目情况创建分支(判断项目是否存在master分支和develop分支,不存在则创建)

Feature

git flow start feature feature-1

  • 更新当前分支(git fetch)
  • 新建feature分支并切换到该分支(git checkout -b)

image.png

git flow finish feature feature-1

  • 更新当前分支和develop分支(git fetch)

image.png

  • 切换到develop分支(git checkout develop)
  • 合并分支(git merge feature)

image.png

  • 删除分支(git branch -d)

image.png

Release

git flow release start 1.1.1

  • 更新develop分支(git fetch develop)

image.png

  • 新建release分支并切换到该分支

image.png

git flow release finish 1.1.1(最后停留在master分支)

  • 更新master分支与develop分支

image.png

  • 分别checkout develop和master,并合并release分支

image.png

image.png

  • 切换到master分支
  • 删除release分支
  • 更新远程分支

image.png

hotfix

git flow hotfix start hotfix-1

  • 更新master(git fetch)
  • 从master新建分支并切换到该分支(git checkout -b hotfix-1)

image.png

git flow hotfix finish hotfix-1(最后停留在develop分支)

  • 更新develop分支和master分支(git fetch)

image.png

  • 分别checkout master和develop
  • 分别合并hotfix分支

image.png

image.png

  • 删除hotfix并推送更新远程master与develop

image.png

总结

这个其实是我实习前2个月写的,一开始组内打算推广使用gitflow工作流,然后让我去做下技术调研。最终的结果是,我们只用上了gitflow的思想。

gitflow的本质是对git命令的多层封装,通过使用组装的git命令,从而达到规范开发流程的目的。后面我们组内约定成俗,不管是修复bug,需求,还是优化,自觉在分支前加上 bugfix/feature/improve前缀,发布后删除分支,按gitflow的流程开发。

然后还想起很久之前的一个面试题:假设你现在开发某个需求,临时要修复bug怎么办,之前只说了思路,不会写,emmm也总结一下,虽然是个简单的东西:

1
2
3
4
5
6
7
8
9
10
11
git stash  //暂存修改

//修复bug
git checkout develop
git checkout -b bugfix/fixbug
//修复然后发布

//切换回需求分支
git checkout feature/someFeature
//拉出之前暂存的修改
git stash pop

关于合并时出现rebase:

1
2
3
4
5
6
//出现这种情况一般是本地develop代码不是最新的,合并上远程会导致冲突
git checkout develop
git pull

git checkout feature/someFeature
git merge develop

Reference

1、learn version control with git

2、Git工作流程

3、 Git-flow备忘清单

4、gitflow

4、 工具:google在线ppt编辑