一千个项目可能有一千种 Git 分支管理策略。
——严士比亚·北
复制代码
在不一样的公司、项目里跌打滚爬过,你是否每次总在适应团队各类各样的 Git 操做规范?做为测试,若你的工做与持续集成有关,又是否由于不一样的 Git 规范而头痛?git
即便是本文介绍的分支管理策略,也不必定适合你们的项目,但咱们长期使用下来,通过屡次优化升级,必定不会难用。测试
为何先说研发流程呢?分支一般能够对应研发流程中不一样的部署环境:优化
有不少同窗分不清预发环境与测试环境区别,预发环境一般数据与线上一致,上线前在该环境用真实数据回归全部功能;测试环境一般用来验收feature。this
不少人用 Git 只使用分支(Branch),不使用标签(Tag)。Git 官网对 Tag 的解释以下:spa
Like most VCSs, Git has the ability to tag specific points in a repository’s history as being important. Typically, people use this functionality to mark release points (
v1.0
,v2.0
and so on).版本控制像其余版本控制系统(VCS)同样,Git 能够给历史中的某一个提交打上标签,以示重要。 比较有表明性的是人们会使用这个功能来标记发布结点(v1.0 等等)。调试
我建议分支除了 master 与 develop 分支外,其余分支都为临时分支,在开发完成后即删除。过多的分支会给你查找目标分支带来麻烦。日志
将版本与进行中的需求分开管理是标签与分支存在的意义。code
Master 是最原始的分支。刚开始开发时,须要从 master 分支 checkout
一个develop 分支做为开发分支。Develop 分支相对 master 分支可能会存在一些 Bug,代码不如 master 分支稳定;cdn
当有新特性或须要解决 Bug,则从 develop 分支 checkout
一个 feature 分支进行开发;
每一个新特性开发完毕,就从 feature 分支发起 Merge request
(MR) 请求合并到 develop 分支;
当全部特性开发完毕并在测试环境测试经过,从 develop 分支发起 MR 请求合并到 master 分支;
在预发环境测试经过后,打个标签,正式发布上线。
线上出现 紧急 Bug 就不能有太长的测试发布流程了,一般能够这么作:
从 master 分支 checkout
一个 hotfix 分支,解决完 Bug 合并回 master 分支,在预发环境测试没问题后打标签发布;
发布完成后,不要忘了更新 develop 分支,由于此时 develop 分支落后于 master 分支,因此可让 develop 分支 rebase
master 分支。
这是最多见的一类场景,一个版本一般不止一个新特性。先开发完成的特性合并回 develop 分以后,会致使其余 feature 代码版本落后没法合并至 develop。
比较常见的解决方法是将 develop 分支合并到 feature2 分支,这样操做有个坏处,会产生冗余的git 日志:Merge branch 'develop' into feature2
。
更好的方法是用 Rebase(变基) 。在分支落后状况下,rebase
develop 能够将当前分支的改动“接在” feature1 的改动以后。
注意:
- rebase 会修改 Git 历史提交记录,操做不当存在必定风险。
- rebase 后,须要
git push -ff
(fast-forward模式) 才能将代码推送到远程仓库
分支管理中,切记 代码只可单路径流动,意味着咱们须要严格遵照下面的操做:
checkout
feature 分支;rebase
master 分支,保持代码从 master 流动至 develop。