该内容由联想乐窗团队张敬佩整理
内容摘自网上,如有侵权,联系删除
本文主要分主要包括以下几个部分的内容
所有的功能开发与修改都在 master 分支上进行的。开发者开始先克隆中央仓库。在自己的项目拷贝中像SVN一样的编辑文件和提交修改;但修改是存在本地的,和中央仓库是完全隔离的。开发者可以把和上游的同步延后到一个方便时间点。
在开发者提交自己功能修改到中央库前,需要先fetch在中央库的新增提交,rebase自己提交到中央库提交历史之上。
这样做的意思是在说,我要把自己的修改加到别人已经完成的修改上。
最终的结果是一个完美的线性历史。
如果本地修改和上游提交有冲突,Git 会暂停 rebase 过程,给你手动解决冲突的机会。
功能分支工作流以集中式工作流为基础,不同的是为各个新功能分配一个专门的分支来开发。功能分支工作流背后的核心思路是所有的功能开发应该在一个专门的分支,而不是在 master 分支上。
这个隔离可以方便多个开发者在各自的功能上开发而不会弄乱主干代码。
功能分支应该有个有描述性的名字,比如animated-menu-items或issue-#1061,这样可以让分支有个清楚且高聚焦的用途。
git的branch非常的强大,但是git本身并没有对如何管理branch做出建议. 多人在同一仓库下,代码的
协作问题会越来越突出. 首先来看看我们之前项目的分支。
我们的问题:
分支众多,命名混乱有的分支用于测试,有的用于代码合并,有的分支已经被废弃,时间久了无法了解分支的具体用途。
混乱疯狂的分支合并操作,多个分支互相合并,出现问题难以回滚。
Gitflow工作流是经典模型,体现了工作流的经验和精髓。随着项目过程复杂化,会感受到这个工作流中深思熟虑和威力!
Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。
最为稳定功能比较完整的随时可发布的代码,即代码开发完成,经过测试,没有明显的bug,才能合并到 master 中。请注意永远不要在 master 分支上直接开发和提交代码,以确保 master 上的代码一直可用;
用作平时开发的主分支,并一直存在,永远是功能最新最全的分支,包含所有要发布 到下一个 release 的代码,主要用于合并其他分支,比如 feature 分支; 如果修改代码,新建 feature 分支修改完再合并到 develop 分支。所有的 feature、release 分支都是从 develop 分支上拉的。
这个分支主要是用来开发新的功能,一旦开发完成,通过测试没问题(这个测试,测试新功能没问题),我们合并回develop 分支进入下一个 release 。
用于发布准备的专门分支。当开发进行到一定程度,或者说快到了既定的发布日,可以发布时,建立一个 release 分支并指定版本号(可以在 finish 的时候添加)。开发人员可以对 release 分支上的代码进行集中测试和修改bug。(这个测试,测试新功能与已有的功能是否有冲突,兼容性)全部完成经过测试没有问题后,将 release 分支上的代码合并到 master 分支和 develop 分支。
用于修复线上代码的bug。**从 master 分支上拉。**完成 hotfix 后,打上 tag 我们合并回 master 和 develop 分支。
默认会初始化 master develop 两个主干分支。如果已有了不同分支,初始化的时候,可能需要手动指定 master 分支 跟 develop 分支。
brew install git-flow(mac)
apt-get install git-flow(ubuntu)
git flow init
git flow feature start 分支名称
git flow feature publish 分支名称
git flow feature pull origin 分支名称
git flow feature finish 分支名称
git flow release start 分支名称 [base]
这里的base代表是基于那个feature分支创建的release分支
git flow release publish 分支名称
git flow release finish 分支名称
如果不勾选第一项 和 第四项 在第三步的时候需要手动合并 master
同理,不勾选第一项 和 最后一项 需要手动将修改merge 回 develop
git branch develop
git push -u origin develop
git checkout -b 分支名称 develop
# 推送到远程 可选
git push -u origin 分支名称
3、完成feature
git pull origin develop
git checkout develop
git merge --no-ff 分支名称 // develop 合并 feature
git push origin develop
git branch -d 分支名称 //删除分支
git push origin --delete 分支名称 // 删除远程分支
git checkout -b 分支名称 develop // 从develop分支创建 release 分支
// 合并 release 分支到 master
git checkout master
git merge --no-ff 分支名称
git push
// 合并 release 分支 到 develop
git checkout develop
git merge --no-ff 分支名称
git push
// 删除 release 分支
git branch -d 分支名称
git push origin --delete 远程分支名称
git checkout -b 分支名称 master
git checkout master
git merge --no-ff 分支名称
git push
git checkout develop
git merge --no-ff 分支名称
git push
git branch -d 分支名称
git tag -a tag tag名称 master
git push --tags
深入理解学习Git工作流(git-workflow-tutorial