Git Flow 用法总结
Git Flow 是 Git 一个扩展,基于 Vincent Driessen 提出的 A successful Git branching model。
注意
- Git Flow 基于
merge
而不是rebase
,基于merge
的优势在于可以很快定位到出问题的commit
,便于快速回滚。 - git merge –no-ff 可以保证即使是 fast-forward 也会产生一个 merge commit。
基于以下五类 branch 进行项目管理。
- master - 每一个 commit 都是一个可发布的版本
- develop - 开发分支
- release - 发布分支,fork 自 develop 分支
- feature - 新功能分支,fork 自 develop 分支
- hotfix - 线上紧急修复
以上五种 branch 基本可以覆盖我们开发中常见的活动。
分支
master
master 是主分支,必须保证它的每一个 commit 都是可以发布的,每一个正式发布的版本都要打上 tag。
release- 分支以及 hotfix- 分支都要 merge 到此分支。
develop
develop 是开发分支,当需要新功能开发时,首先从 develop 分支 fork 出一个 feature- 分支,开发完成后再 merge 回 develop 分支。
feature- 分支可以是实验性的功能,也可能是一个下一个版本需要的功能。
release
realse 分支是临近发布时从 develop 分支拉取的分支,这样可以保证当前的发布版本不会影响到下一个版本的新功能开发。
|develop | * |\ | \ /* |relase / | | feature| | | | | | | | |
release 分支创建以后,还可以继续在 develop 上进行新功能开发,但是 release 分支只允许小的 bug fix,不能有大功能改动。
最后 release 分支还是要 merge 回 master 和 feature 分支。
feature
feature 负责新功能开发,开发完毕后需要 merge 回 develop 分支。
hotfix
hotfix 的主要用于线上 bug 的紧急修复,fork 自 master 分支,修复完毕后需要 merge 回 master 分支和 develop 分支。
如果此时 release 分支还存在,hotfix 需要 merge 到 release 分支而不是 develop 分支,因为 release 分支最终会被 merge 到 develop 分支上。
命令
创建 feature 分支
$ git checkout -b myfeature develop
完成 feature 分支
$ git checkout develop
$ git merge --no-ff myfeature
$ git branch -d myfeature
$ git push origin develop
创建 release 分支
$ git checkout -b relese-1.2 develop
$ ./bump-version.sh 1.2
$ git commit -a -m "Bumped version number to 1.2"
完成 release 分支
$ git checkout master
$ git merge --no-ff release-1.2
$ git tag -a 1.2
$ git checkout develop
$ git merge --no-ff release-1.2
$ git branch -d release-1.2
创建 hotfix 分支
$ git checkout -b hotfix-1.2.1 master
$ ./bump-version.sh 1.2.1
$ git commit -a -m "Bumped version number to 1.2.1"
$ git commit -m"Fixed savere production problem"
完成 hotfix 分支
$ git checkout master
$ git merge --no-ff hotfix-1.2.1
$ git tag -a 1.2.1
$ git checkout develop
$ git merge --no-ff hotfix-1.2.1
$ git branch -d hotfix-1.2.1
Git Flow 命令
初始化
$ git flow init
feature
$ git flow feature start <name>
$ git flow feature finish <name>
release
$ git flow release start <release> [<base>]
$ git flow release finish <release>
hotfix
$ git flow hotfix start <release> [<base>]
$ git flow hotfix finish <release>
留下评论