vlambda博客
学习文章列表

三个知识点搞定git-flow

什么是git-flow

git-flow是一种约定,就是大家制定一种用git管理项目的方式,协作者都要遵守规定。

git-flow规则被很多分享者复杂化,用了很多文字和流程图,让git-flow的学习者看得云里雾里,但其实非常容易掌握。

总结一句话就是,**git-flow就是2个长期分支+ 3个短期分支。**学习者只需要知道三件事:

  1. 什么时候建立一个新分支。

  2. 新分支基于哪个分支建立,如何命名。

  3. 新分支完成后,需要合并到哪个分支。

这三句话就是git-flow的全部内容了。

2个长期分支是master和develop分支,master分支管理达到上线资格的代码,develop管理正在开发中的代码,我们从来不会在master或develop分支上直接提交代码,而是由其他分支合并到master或develop分支;它们是长期存在的,伴随项目的整个生命周期,从项目的初始化,一直到这个项目被废弃。

3个短期分支指的是,feature、release和hotfix(也有人叫fixbug)分支,它们都有自己生存的时间,但都不会太长,feature分支用来开发新功能,新功能开发完,feature分支就应该被删除;release用来做上线前的测试,通过测试后,release也就没有存在价值了;hotfix用来修复线上bug,修复完后,也会被删除。

举个例子

现在我们用一个例子来说明这几个分支是如何配合完成一个功能的上线的。

假如我们要协作开发一个博客的评论功能。

基于develop建立一个feature/comment分支,feature前缀表明了这是一个功能开发分支,用斜线将前缀和名称分开。

git checkout -b feature/comment develop

feature/comment的开发者可能不止一人,没有关系,每个人都拉取这个分支就好了,提交的代码也提交到feature/comment分支上。

git pull origin feature/comment --rebase
git push origin feature/comment 

经过一段时间的开发,觉得功能已经完善了,可以和博客的其他功能放在一起跑一下了,那就把feature/comment合并到develop分支。

git checkout develop
git merge --no-ff feature/comment 
git branch -d feature/comment 

默认的,git merge是快速合并(fast-forward)方式,并不会生成新的提交节点,使用no-ff选项会生成一个新的提交节点,在这里可以写一些注释,标记下每个时期git的走向;但这并不会必须的,还要看团队的规定;最后执行的动作是删除分支。

合并到develop分支后,发现工作的很好,可以让测试同学介入了,那就建立一个预发布分支吧。

git checkout -b release/1.2.1 develop

release分支要带上版本号,当然,它应该是基于develop分支建立的。

测试完成后,就可以合到master并上线了。

git checkout master
git merge --no-ff release/1.2.1
git tag -a 1.2.1
git checkout develop
git merge --no-ff release/1.2.1
git branch -d release/1.2.1

一般情况下,预发布分支上还会有提交,因为很难写出没有bug的代码。所以最后也需要分别合并到master和develop分支,合并完成后,删除release分支。

顺利上线了,但是发现一个bug,有人要被扣奖金了,快点修复。

git checkout -b hotfix/comment_length_limit master

记住hotfix是基于master分支就对了。

修复完,需要合并一下。

git checkout master
git merge --no-ff hotfix/comment_length_limit
git tag -a 0.1.1
git chekcout develop
git merge --no-ff hotfix/comment_length_limit
git branch -d hotfix/comment_length_limit 

最后不要忘记删除hotfix分支。

这就是git-flow流程的全部了。

git-flow也是一个工具名称

有一个git-flow工具,它的本质是shell脚本,它规定了一批新命令,使用这些命令可以一次执行多个命令,比如当我们有hotfix时,需要切换分支、合并、删除分支等操作,而且不止一次的切换和合并,git-flow工具把这些操作合并到一起了,会方便很多。

这个git-flow工具的名字是:git-flow,是的,你没有看错。