![](https://img.haomeiwen.com/i4759699/4a576e84e983fc2b.jpeg)
简介
git-flow是一个git关于git版本流程控制的工具,使用方法简单。
安装
MacOS
通过home-brew
来安装
brew install git-flow
Linux Ubuntu
sudo apt-get install git-flow
查看版本
git-flow version
工作原理
参考:https://www.cnblogs.com/lcngu/p/5770288.html
分支讲解
Master
master分支一定是唯一的,且稳定的。
一般都是在Realease分支和Hotfix分支修改了一些Bug之后,确保已经稳定了,才会合并到Master分支。
Develop
特性分支的开发,依赖于Develop分支,新建特性和合并特性分支,都是基于Develop分支。最好不要在Develop分支直接开发,而是创建特性分支来开发。
同样的,Develop分支也是唯一的。
Release
Release分支是属于发布版本的分支。在同一个时间只有一个release分支存在。
在release分支上只能做一些bug修改,少量的代码修复。尽量避免写大量的代码。
创建release分支:
git flow release start v.1.0
修改完bug之后,再结束该release分支
git flow release finish v.1.0
这里面涉及到的内容:
- release分支会将内容merge到master分支
- 同时会打上tag
- release分支会将内容merge到develop分支
- release分支会被删除。
Feature
Feature分支依赖于Develop分支,可以同时存在多个。
在该分支里面写代码业务逻辑,完成之后合并到Develop分支。
创建一个叫做test
的特性分支
git flow feature start test
完成一个叫做test
的特性分支:
git flow feature finish test
将本地的特性分支推送到远端仓库:
git flow feature publish test
这里需要注意,你在本地创建的特性分支,在finish之后,就消失了。因为合并到了develop分支里面。
如果你publish了这个特性分支,那么他将作为一个独立的分支存在于远端仓库。可以大家同时协作开发。
Hotfix
当Master分支出现bug的时候,就需要创建一个Hotfix分支了。Hotfix分支基于Master分支,修改完成之后,同样会合并到Master分支。
创建Hotfix分支:
git flow hotfix start v.1.0
完成Hotfix分支:
git flow hotfix finish v.1.0
这句命令会将hotfix分支merge到master分支和release分支,并删除该hotfix分支。
值得注意的是,如果bug修复时,正存在着release分支,那么hotfix分支会merge到release分支,而不是develop分支。
使用方法
进入项目目录
我拿我的
sharex
项目目录来举例
cd sharex
![](https://img.haomeiwen.com/i4759699/1804d68e2b01eebf.png)
可以看到,该项目是没有tag
,且只有一个branch
的。
初始化git-flow
结构
执行git-flow init
,之后输入回车就可以,你会看到如下内容:
15:07:48 @~/code/sharex$ git-flow init
Which branch should be used for bringing forth production releases?
- master
Branch name for production releases: [master] //生产环境的分支名称
Branch name for "next release" development: [develop] //开发环境的分支名称
How to name your supporting branch prefixes?
Feature branches? [feature/] //特性分支的分支名称
Release branches? [release/] //发布版本的分支名称
Hotfix branches? [hotfix/] //Bug修复的分支名称
Support branches? [support/]
Version tag prefix? []
之后输入git branch
查看当前所属的分支
15:12:09 @~/code/sharex$ git branch
* develop
master
可以看到当前所属的分支为develop
。这个是 git-flow
负责创建的。
创建特性分支
如果你想填写一些功能,你可以选择创建一个新的特性分支,完成之后再合并到
develop
分支中去。
在这里我创建了一个名字为test
的特性分支。并出现了以下信息
15:23:34 @~/code/sharex$ git flow feature start test
Switched to a new branch 'feature/test'
Summary of actions:
- A new branch 'feature/test' was created, based on 'develop'
- You are now on branch 'feature/test'
Now, start committing on your feature. When done, use:
git flow feature finish test
我们再查看一下,当前所属的分支:
15:23:52 @~/code/sharex$ git branch
develop
* feature/test
master
发现当前处于新建的特性分支中。
关闭特性分支
当你完成了特性分支的功能开发,你要先执行
git add
、git commit -m ""
之后再关闭特性分支。
你可以执行git flow feature finish test
,会出现如下内容:
15:32:18 @~/code/sharex$ git flow feature finish test
Switched to branch 'develop'
Updating 8247fbb..973b54e
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
Deleted branch feature/test (was 973b54e).
Summary of actions:
- The feature branch 'feature/test' was merged into 'develop'
- Feature branch 'feature/test' has been removed
- You are now on branch 'develop'
查看当前所属的分支git branch
:
15:32:47 @~/code/sharex$ git branch
* develop
master
发现我们回到了本地的develop
分支,而之前创建的feature/test
分支已经消失了。
将特性分支推送到远程仓库
在项目中,大家有可能同时开发某一个特性分支。这时就需要将创建的特性分支推送到远程仓库了。
使用git flow feature publish test
创建release分支
用来管理发布的版本,做些小的修改
15:54:17 @~/code/sharex$ git flow release start v1.0
Switched to a new branch 'release/v1.0'
Summary of actions:
- A new branch 'release/v1.0' was created, based on 'develop'
- You are now on branch 'release/v1.0'
Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:
git flow release finish 'v1.0'
查看当前所属分支:
17:26:28 @~/code/sharex$ git branch
develop
master
* release/v1.0
结束当前release分支
当你修改完bug之后,你需要关闭当前release分支。由此可见,release的生命周期很短暂。
17:28:58 @~/code/sharex$ git flow release finish v1.0
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
README.md | 1 +
1 file changed, 1 insertion(+)
Deleted branch release/v1.0 (was 240dfef).
Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged 'v1.0'
- Release branch has been back-merged into 'develop'
- Release branch 'release/v1.0' has been deleted
这里会让你填写一些相关的合并分支的信息。之后会删除该release分支。
查看一下当前所属的分支:
17:57:48 @~/code/sharex$ git branch
* develop
master
我们可以到master分支和develop分支,通过
git log
来查看log相关的信息。
总结
命令总结
- 初始化
git flow
控制流:
git flow init
- 创建特性分支:
git flow feature start test //test改成你要创建的特性名称
- 完成特性分支:
git flow feature finish test
- 创建release分支:
git flow release start v1.0
- 完成release 分支:
git flow release finish v1.0
- 创建Hotfix分支:
git flow hotfix start v.1.0
- 完成Hotfix分支:
git flow hotfix finish v.1.0
参考:
https://www.cnblogs.com/lcngu/p/5770288.html
https://blog.csdn.net/lihao21/article/details/47789419
网友评论