学会使用 Git 的同时, 也得学会使用 GitFlow, GitFlow 是创建在 Git 的基础之上, 对 Git 命令进行了一次封装.html
大多数开发人员使用的 Git 时, 顶多有三个分支: 一个是 master, 一个是 develop, 再就是在 develop 分支上拉出来的开发分支, 或者就是直接在 master 分支上拉出一个分支进行开发.git
这样开发比较快速, 对于小团队来讲, 已经知足了. 可是随着团队人数的增多, 项目越作越大, 就会出现各类各样的问题, 首当其冲的就是代码功能分布杂乱.github
就像代码须要代码规范同样, 代码管理一样须要一个清晰的流程和规范, 这就是 GitFlow.ubuntu
一张图让你对 GitFlow 有一个认识:centos
下面是我对每一个分支的理解.bash
这个分支就是生产分支, 只有 hotfix 分支和 release 分支的代码能够合并进来, 每一次合并都会打一个 tag.工具
这个分支是基于 master 建立的, 包含全部下一个 release 分支的代码.测试
这个分支是从 develop 分支建立的, 主要用于开发新的功能, 若是功能要发布了, 则合并到 develop 分支.代码规范
这个分支是基于 develop 分支建立的, 建立出 release 分支以后, 部署到测试环境, 测试人员进行测试, 若是有问题, 直接在 release 分支上进行修改, 而后合并到 develop 分支, 每一次修改都须要合并待 develop 分支.code
若是测试经过, 该分支的使命结束, 将 release 分支的代码分别合并到 master 分支和 develop 分支.
若是 master 版本出现 bug 时, 从 master 上拉取一个 hotfix 分支, 完成 hotfix 后, 合并到 master 分支和 develop 分支.
简单说, GitFlow 就是把平时咱们使用的 git 命令合并起来执行, 本质上能够直接使用普通的 git 命令进行相似 gitflow 的分支管理.
使用 git flow init
在现有的 Git 项目中进行初始化, 若是远端有 develop 分支, 须要将本地刚刚初始化的分支和远端相关联(git branch --set-upstream-to=origin/develop develop
), 而后拉取远端的代码.
以下:
➜ gitflow git:(master) 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/] Support branches? [support/] Version tag prefix? []
执行完以后, 默认使用 master 做为生产分支, 而后在本地建立一个 develop 分支并切换过去, 而后设置每一个特征分支的前缀, 默认便可.
以后咱们将 develop 分支推上去(git push -u origin develop
).
# 建立一个 feature 分支 git flow feature start feature01 # 推送本地 feature 分支到远端 git flow feature publish feature01 # 拉取远端的 feature 分支到本地 git flow feature pull origin feature01 git flow feature track feature01 # 完成 feature 分支 git flow feature finish feature01
不管在哪一个分支上执行 start, 新建立的 feature 分支老是基于 develop 分支进行建立.
不管在哪一个分支上执行 finish, 命令执行结束后, feature 分支会被合并到 develop 分支, 而后 feature 分支会被自动删除.
# 建立一个 release 分支, 后面的 base: 即提交记录的 sha-1 hash 值, 这个值必须是 develop 分支下的 git flow release start release01 [base] # 推送本地 release 分支到远端 git flow release publish release01 # 拉取远端的 release 分支到本地 git flow release pull origin release01 git flow release track release01 # 完成 release 分支 git flow release finish release01
不管在哪一个分支上执行 start, 新建立的 release 分支老是基于 develop 分支进行建立.
不管在哪一个分支上执行 finish, 命令执行结束后, release 分支会被合并到 develop 分支和 master 分支, 而后在 master 分支上打一个 tag, 最后 release 分支被删除.
最后不要忘记 push tag(git push --tags
).
# 建立一个 hotfix 分支 git flow hotfix start hotfix01 # 完成一个 hotfix 分支 git flow hotfix finish hotfix01
不管在哪一个分支上执行 start, 新建立的 hotfix 分支老是基于 master 分支进行建立.
不管在哪一个分支上执行 finish, 命令执行结束后, hotfix 分支会被合并到 master 分支, 而后在 master 分支上打一个 tag, 而后 hotfix 分支又合并到了 develop 分支, 最后 hotfix 分支被删除了.
最后不要忘记 push tag(git push --tags
).
support 功能只是测试版本, 不建议使用.
brew install git-flow
yum install -y epel-release yum install -y gitflow
apt-get install git-flow
固然是 SourceTree.
并不推荐使用客户端工具, 多敲键盘少用鼠标.