git flow使用介绍
关注我的个人博客:https://pinbolei.cn,获取更多内容
GitFlow
是一套基于git的工作流程,这个工作流程围绕着项目发布定义了一个严格的如何建立分支的模型。
GitFlow
规定了如何建立、合并分支,如何发布,如何维护历史版本等工作流程。简单说就是每一个功能特性的开发是在分支上开发,而不是在主干开发,分支开发完毕后再合并到主干上。
GitFlow工作流程的优势在于:
2.1主干分支(master和develop)
1.master分支存储了发布版本的历史,各个版本通过tag来标记(git tag -a v0.1
)
2.develop分支是一个集成分支,用来整合各个功能feature分支,也方便给master分支上的所有提交分配一个版本号。
除了master
和develop
主分支线,其他的分支都是临时的分支,有一定的生命周期的,其余的工作流程分支都是围绕这两个分支之间的区别进行的。
2.2功能分支(feature)
开发每个功能都必须新开个feature
分支,feature
分支派生自develop
分支。开发完成后要合并回develop
分支。feature
分支永远不会和master
分支打交道。
2.3待发布分支(release)
release
分支不是一个放正式发布产品的分支,可以理解为“预发布”或者“待发布”分支。
当开发的功能完成并满足发布的条件时,将这些满足条件的feature
分支合并到develop
分支上,然后从develop
分支开出一个release
分支,开始准备一个发布版本。
在release
分支上,不能再添加新的功能,但是我们可以:
当到发布日时,发布相关的工作都完成后,release
分支合并回master
分支,并打出版本标签,发布完成后,release
分支合还要并回develop
分支。
2.4维护分支(hotfix)
维护分支也就是bug修复分支,用来快速修复生产环境的紧急问题。
项目发布后或多或少会有一些bug存在,而bug的修复工作并不适合在develop
上做,这是因为:
这个分支是唯一一个开放过程中直接从master
分支派生来的分支。
快速的修复问题后,hotfix
分支应该被合并回master
分支,同时也要合并回develop
分支,这样develop
分支也能享受到bug修复的好处。然后master
分支需要打一个版本标签,例如v0.11。
5.1 创建develop分支
在本地master
基础上创建一个develop
分支,然后push到服务器;
git branch develop
git push -u origin develop
以后这个分支将会包含项目的全部历史,而master
分支将只包含了部分历史。
其它开发者这时应该克隆中央仓库(如果已经克隆过该项目,则不需要执行以下第一条命令。),建好develop
分支的跟踪分支:
git clone ssh://user@host/path/to/repo.git
git checkout -b develop origin/develop
5.2 新建feature分支
基于develop
分支创建新功能分支:
git checkout -b feature/demo develop
推送到远程仓库,共享:
git push
在此分支上开发提交代码:
git status
git add
git commit -m '***'
5.3 完成新功能开发(合并feature分支到develop)
当确定新功能开发完成,且联调测试通过,并且新功能负责人已经得到合并feature
分支到develop
分支的允许;这样才能合并feature
分支到develop
。
git pull origin develop
git checkout develop
git merge --no-ff feature/demo
git push
git branch -d feature/demo
第一条命令是确保在合并新功能之前,develop
分支是最新的。
注:新功能分支,永远不可以直接合并到master分支。合并可能会有冲突,应该谨慎处理冲突。
5.4 新建待发布分支release
项目准备发布时,基于develop
分支新建一个待发布分支release
,确立版本号:
git checkout -b release/v0.1 develop
推送到远程仓库共享:
git push
这个分支是清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方,像是一个专门用于改善发布的功能分支。
5.5 release分支合并到master发布
如果准备好了对外发布,就将release
分支合并到master
分支和develop
分支上,并删除发布分支。
release
分支合并到master
分支:
git checkout master
git merge --on-off release/v0.1
git push
release
分支合并到develop
分支,合并完成后并删除发布分支:
git checkout develop
git merge --on-off release/v0.1
git push
git branch -d release/v0.1
合并回develop
分支很重要,因为在发布分支中已经提交的更新需要在后面的新功能中也要是可用的。
发布分支是作为功能开发(develop
分支)和对外发布(master
分支)间的缓冲。只要有合并到master
分支,就应该打好Tag以方便跟踪。
git tag -a v0.1 -m 'Initial public release' master
git push --tags
5.6 线上Bug修复流程
当终端用户,反馈系统有bug时,为了处理bug,需要从master
中创建出维护分支hotfix
,等到bug修复完成,需要合并回master
基于master
新建hotfix
分支:
git checkout -b hotfix/v0.1.0.1 master
当问题修复完成,并测试通过后,将hotfix
分支合并到master
分支和develop
分支,并打出一个标签。
将hotfix
分支合并到master
分支:
git checkout master
git merge --on-off hotfix/v0.1.0.1
git push
将hotfix
分支合并到develop
分支,合并完成后删除hotfix
分支:
git checkout develop
git merge --on-off hotfix/v0.1.1
git push
git branch -d hotfix/v0.1.1
打标签:
git tag -a v0.1.1 -m 'Initial public release' master
git push --tags
GitFlow不仅仅是一种规范,还提供了一套方便的工具。大大简化了执行GitFlow的过程。
6.1 安装
1.OSX
$ brew install git-flow
2.Debian/Ubuntu Linux
$ apt-get install git-flow
3.Windows(cygwin
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
6.2 Initialize
对一个git仓库配置一下git flow。主要是一些命名规范,比如feature
分支的前缀,hotfix
分支的前缀等。一般用默认值就行。
git flow init
6.3 新建feature分支
从develop
开启一个新的分支:
git flow feature start MYFEATURE
这个命令会从develop
分出一个分支,然后切换到这个分支上面。
6.4 合并feature分支到develop
一个feature
分支开发完毕后,要做以下事情:
git flow feature finish FEATURE_NAME
6.5 把feature分支推送到服务器
果你想让别人和你一起开发MYFEATURE分支,那就把这个分支push到服务器上
git flow feature publish MYFEATURE
获得一个别人push到服务器上的feature
分支:
git flow feature pull origin MYFEATURE
6.6 新建release分支
创建一个release
分支,派生自develop
分支:
git flow release start RELEASE
6.7 把feature分支推送到服务器
git flow release publish RELEASE
6.8 合并release分支到master和develop
一个release
分支结束后,需要做以下工作:
git flow release finish RELEASE
最后不要忘记把tag push到服务器git push --tags
6.9 新建hotfix分支
开启一个hotfix分支:
git flow hotfix start VERSION
结束一个hotfix
分支,和release
一样,同时合并回develop
和master
:
git flow hotfix finish VERSION