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个,生命周期较短
第一步:为master分支配套一个develop分支。简单来做可以本地创建一个空的develop分支,push到服务器上:
git branch –b develop
git push -u origin develop
【说明】以后这个分支将会包含了项目的全部历史,而master分支将只包含了部分历史。其它开发者这时应该克隆中央仓库,建好develop分支的跟踪分支:
git clone ssh://user@host/path/to/repo.git
git checkout -b develop origin/develop
【说明】现在每个开发都有了这些历史分支的本地拷贝。从develop分支拉一个特性分支进行开发
git checkout -b some-feature develop
git push(如果这个功能需要多个人协作,建议push)
【说明】添加提交到各自功能分支上:编辑、暂存、提交。
git status
git add
git commit
git push(如果这个功能需要多个人协作)
【说明】添加了提交后,如果团队使用Pull Requests,这时候可以发起一个用于合并到develop分支。否则就直接合并到本地的develop分支后push到中央仓库
git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature
git push origin --delete some-feature (如果这个功能需要多个人协作)
【说明】第一条命令在合并功能前确保develop分支是最新的。注意,功能决不应该直接合并到master分支。
然后用一个新的分支来做发布准备。这一步也确定了发布的版本号:
git checkout -b release-1.0.0 develop
【说明】这个分支是清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方,像是一个专门用于改善发布的功能分支。只要创建这个分支并push到中央仓库,这个发布就是功能冻结的。任何不在develop分支中的新功能都推到下个发布循环中。
一旦准备好了对外发布,合并修改到master分支和develop分支上,删除发布分支。
git checkout master
git merge release-1.0.0
git push
git checkout develop
git merge release-1.0.0
git push
git branch -d release-1.0.0
git push origin --delete release-1.0.0
【说明】发布分支是作为功能开发(develop分支)和对外发布(master分支)间的缓冲。只要有合并到master分支,就应该打好Tag以方便跟踪。
git tag -a 1.0.0 -m "Initial public release" master
git push --tags
【说明】对外发布后,发现了当前版本的一个Bug,从master分支上拉出了一个Hotfix分支,提交修改以解决问题,然后直接合并回master分支
git checkout -b issue-#001 master
Fix the bug…..
git checkout master
git merge issue-#001
git push
【说明】就像发布分支,维护分支中新加这些重要修改需要包含到develop分支中,然后才删除这个Hotfix分支
git checkout develop
git merge issue-#001
git push
git branch -d issue-#001