Git

Git Flow 用法总结

Posted by liangfei on 2015-08-04

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 进行项目管理。

  1. master - 每一个 commit 都是一个可发布的版本
  2. develop - 开发分支
  3. release - 发布分支,fork 自 develop 分支
  4. feature - 新功能分支,fork 自 develop 分支
  5. 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>

参考


欢迎扫码关注 老梁写代码 微信公众号