说明

  • 对于大公司大项目,按照严格规范执行,毕竟出错后果很严重
  • 对于人数少、迭代快、成长型团队来说,使用 master、dev、hotfix 分支即可,可提升工作效率

分支管理

大厂git分支管理规范:gitflow规范指南 - kevin_ying - 博客园

git分支合并规范

master

  • 不能在 master 上直接修改,只能从 hotfix 或 release 分支合并过来
  • 分支合并到 master 后,创建 tag 标签版本,版本号递增
  • tag 标签的每个版本均可随时部署

hotfix

  • 在 master 上发现新的 Bug 时,基于 master 创建一个 hotfix
  • 开发完成后,合并回 master 和 develop 分支,删除该 hotfix 分支,master 创建 tag 标签版本

release

  • 发布分支,基于 develop 分支创建,是用来测试的版本分支
  • 测试开发完成后,合并回 master 和 develop 分支,删除该 release 分支,master 创建 tag 标签版本

develop

  • 主开发分支,基于 master 创建。接收来自 feature 分支的合并
  • 开发完成后(阶段性版本),创建 release 分支,有新需求则继续在 develop 分支上开发

feature

  • 新功能开发分支(开发周期比较长,可以引入该分支),基于 develop 分支创建
  • 开发完成后,合并回 develop 分支,删除该 feature 分支。如果需要马上测试的话,基于 develop 创建 release 分支

Git Flow 命令示例

Develop

  • 创建 develop
    git branch develop
    git push -u origin develop

Feature

  • 开始 Feature
    通过 develop 新建 feaeure 分支
    git checkout -b feature develop
    或者, 推送至远程服务器:
    git push -u origin feature
    修改 md 文件
    git status
    git add .
    git commit
  • 完成 Feature
    git pull origin develop
    git checkout develop
    –no-ff:不使用 fast-forward 方式合并,保留分支的 commit 历史
    –squash:使用 squash 方式合并,把多次分支 commit 历史压缩为一次
    git merge –no-ff feature
    git push origin develop
    git branch -d some-feature
    如果需要删除远程 feature 分支:
    git push origin –delete feature

Release

  • 开始 Feature
    git checkout -b release-0.1.0 develop
  • 完成 Feature
    git checkout master
    git merge –no-ff release-0.1.0
    git push
    git checkout develop
    git merge –no-ff release-0.1.0
    git push
    git branch -d release-0.1.0
    git push origin –delete release-0.1.0
    合并 master/develop 分支之后,打上 tag
    git tag -a v0.1.0 master
    git push –tags

Hotfix

  • 开始 Hotfix
    git checkout -b hotfix-0.1.1 master
  • 完成 Hotfix
    git checkout master
    git merge –no-ff hotfix-0.1.1
    git push
    git checkout develop
    git merge –no-ff hotfix-0.1.1
    git push
    git branch -d hotfix-0.1.1
    git push origin –delete hotfix-0.1.1
    git tag -a v0.1.1 master
    git push –tags