Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架。
master分支存放所有正式发布的版本,可以作为项目历史版本记录分支,不直接提交代码。仅用于保持一个对应线上运行代码的 code base。
develop分支为主开发分支,不直接提交代码。
feature分支为新功能分支,feature分支都是基于develop创建的,开发完成后会合并到develop分支上。同时存在多个。
release分支基于最新develop分支创建,当新功能足够发布一个新版本(或者接近新版本发布的截止日期),从develop分支创建一个release分支作为新版本的起点,用于测试,所有的测试bug在这个分支改。测试完成后合并到master并打上版本号,同时也合并到develop,更新最新开发分支。(一旦打了release分支之后不要从develop分支上合并新的改动到release分支),同一时间只有1个,生命周期很短,只是为了发布。
hotfix分支基于master分支创建,对线上版本的bug进行修复,完成后直接合并到master分支和develop分支,如果当前还有新功能release分支,也同步到release分支上。同一时间只有1个,生命周期较短。
简化的流程图:
git clone http://mrivandu@127.0.0.2:8888/demo/GitFlow.git
git config credential.helper store # 记住密码,后续提交无需再次输入密码。
进入仓库所在目录,配置用户信息。用户信息包括用户名及邮箱,如果是全局配置,加上–global选项。
git config user.name "mrivandu"
git config user.email "mrivandu@hotmail.com"
develop 分支与 master 分支如下图:
git add .
git commit -m "init"
git branch develop master
git push -u origin develop
提交流程如图:
通过develop新建feaeure分支
git checkout -b feature develop
feature 分支可以只存在本地仓库,也可以推送至远程服仓库:
git push -u origin feature
在本地仓库修改相关文件:
git status
git add .
git commit -m "modify"
完成 feature 分支的开发后,合并到 develop 分支
git pull origin develop
git checkout develop
#--no-ff:不使用fast-forward方式合并,保留分支的commit历史
#--squash:使用squash方式合并,把多次分支commit历史压缩为一次
git merge --no-ff feature
git push origin develop
feature 分支合并到 develop 后,删除本地分支(也可以保留不删除):
git branch -d some-feature
如需删除远程feature分支:
git push origin --delete feature
提交流程如图:
检出 release 分支:
git checkout -b release-0.1.0 develop
完成 release 分支的开发,合并回 master 分支和 develop 分支:
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
删除本地 release 分支(亦可保留):
git branch -d release-0.1.0
删除远程仓库 release 分支(亦可保留):
git push origin --delete release-0.1.0
合并 master/devlop 分支之后,打 tag:
git tag -a v0.1.0 master -m "demo version"
git push --tags
提交流程如图:
完成 hotfix 分支,合并至 master 分支:
git checkout -b hotfix-0.1.1 master
git checkout master
git merge --no-ff hotfix-0.1.1
git push
完成 hotfix 分支,合并至 develop 分支:
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
删除 hotfix 分支:
git branch -d hotfix-0.1.1
git push origin --delete hotfix-0.1.1 # 如果本地已向 远程仓库推送,可以使用该命令删除远程 hotfix 分支
完成 hotfix,打 tag:
git tag -a v0.1.1 master
git push --tags
# 删除本地 tag: git tag -d v0.1.1
# 删除远程 tag:git push origin :refs/tags/v0.1.1