权威参考:
a-successful-git-branching-model
沉思:
按照大佬博客中的理解,gitflow分支开发模型,适合维护明确版本较多的的软件工程,最好版本的发布有明确的周期,以及相应的功能时间节点。但是对于CD(持续部署)来说,可能不是一个好的选择,因为CD持续部署可能没有传统软件工程一样,版本清晰明了。
示意图:
git分支介绍
production(master)分支:
当需要固化版本的时候,如设置v1,v2,是最近发布到生产环境的分支,本分支代码只能从只能从其他分支(hotfix分支、release分支)合并,所有在master上的分支上的commit应该打tag
release分支(release-*):
当我们需要一个新版本的时候,我们基于develop分支创建一个release分支,完成release(测试、修改bug)之后合并到master分支和develop分支,同时在master分支上打个tag记住release版本号,然后可以删除release分支。(所以说在release分支上是可以提交代码的)
develop分支
主干开发分支,包含发布到下一个release的代码
feature分支(feature-*)
这个分支主要用来开发新的功能,一旦开发完成,我们就将它合并到develop分支,合并完分支后一般会删掉这个feature分支,也可以保留。
hotfix分支(hotfix-*)
是一个临时分支,我们需要基于master分支创建一个新的hotfix分支,进行bug修复,完成hotfix后,合并回master分支和develop分支,同时在master上打一个版本。
通过对分支的描述,我们大概已经知道了git flow的工作流程。
gitflow代码示例
- 创建develop分支
git branch develop
git push -u origin develop
- 开始新feature开发
git checkout -b some-feature develop # -b 依据develop创建一个新分支
# 推送到远程
git push -u origin some-feature
# 做一些改动
git status
git add some-file
git commit -m "提交的信息"
- 完成feature
# 更新一下develop分支
git pull origin develop
# 先切换到develop分支
git checkout develop
#然后吧feature分支合并到develop分支
git merge --no-ff some-feature
#推送develop到远程
git push origin develop
#删除分支
git branch -d some-feature
# 删除掉远程的fature分支
git push origin --delete some-feature
- 开始release
git checkout -b release-0.1.0 develop
git push -u origin release-0.1.0
- 完成release
# 切换到master分支,把release分支合并到master分支
git checkout master
git merge --no-ff release-0.1.0
# 切换到develop分支,把release分支合并到develop分支(修改bug或者测试的一些改动)
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分支上打tag版本标签
git tag -a v0.1.0 master
git push --tags
- 开始hotfix
git checkout -b hotfix-0.1.1 master
- 完成hotfix
#合并hotfix到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 tag -a v0.1.1 master
git push --tags
Git日常操作
- 将本地分支与远程指定分支关联(手动建立关联),远程分支在前,本地分支在后
git branch --set-upstream-to origin/dev dev
Git使用手册
git官方文档