git开发流程总叙述
这次在公司开发项目,学到了很多东西,对很多东西都颠覆了之前的理解写这篇博客,来说下自己对git的在产品开发流程中的理解。(注:本篇博客是讲解git进阶的,如果没有用过git的人,请先看git教程)
现在我们首先给出在正式的产品发布中,标准的git的开发流程图:
我们对上述图形做个总体的说明:
master分支:顾名思义,主分支,是最重要的分支,这个分支记录的代码都是成熟的,稳定的产品代码,当在beta版本的项目或是开发版本的项目得到了充分的验证之后,我才能将分支并入master分支。master分支永远是production-ready的状态,即稳定可产品化发布的状态。
develop branches(dev分支):这个分支每个开发者做开发的分支,也就是我们进行功能点开发的分支,dev分支的迭代次数很多,记录了我们开发功能点,修复BUG,重构等一系列版本迭代的变化。当每次Feature branches完善后,我们可以申请merge request,然后通过leader或者测试的review,同dev进行合并。
Feature branches:这个分支就是我们每次做功能点开发,fixbug,refactor所需要提交的分支,feature branches记录了我们在具体开发过程中的对项目代码的变化,当我们在features branches完成了任务后,则可以申请merge request,将自己的分支合并到dev分支
release branches: 同样,这也是有多个分支组成的一个分支系列。这个分支系列从develop分支出来,也就是预发分支。在预发状态下,我们往往会在这个分支上进行打包,测试,然后由测试工程师通知开发工程师,测试之后出现的BUG,然后进行一系列的BUG修复;不断反复进行上述操作之后,BUG基本被消除,然后我们可以发布一个稳定的版本号。
Hotfix branches:这个分支系列也就是我们常说的紧急线上修复,当线上出现bug且特别紧急的时候,就可以从master拉出分支到这里进行修复,修复完成后分别并入master和develop分支
平时常用的git项目开发流程
在平时开发过程中,我们一般都是用到的dev分支和Feature分支,一般的开发流程如下:
简述下上述的图:
1. 我们在本地都会有一个dev分支,当我们要进行一个功能点(这里假设为功能点1)的开发的时候,我们不要在本地dev分支上做修改,而是在本地新建一个分支(feature1),然后切换到这个分支上去,在新建的这个分支中进行功能点的开发
2. 当我们在feature1分支开发完成后,觉得功能点已经做得差不多了,我们再将这个feature1分支推到远程服务器上(注:在推之前,要保存先合并服务器最新的dev分支,避免引起冲突不能合并)。
3. 然后我们在服务器上,发起mergerequest的请求给review代码的人,将新开发的代码,交由他们来进行review
4. 如果代码没有通过review,则我们需要在本地的分支上,按照review者的意见进行修改,然后在推上服务器,直到代码通过review
5. 代码通过review后,我们写的代码就会自动地在服务器上进行合并,然后我们的代码,就会顺利地进入服务器dev分支了
6. 我们回到本地分支,因为feature1已经成功通过review了,这样的话,我们可以把本地的dev分支进同feature1分支实行合并,然后删除feature1分支了
7. 至此,我们已经按照git规范流程完成了功能点1的开发。
从以上git的流程来看,我们能明白以下这几点很重要:
- 本地的dev分支一定要保持纯净,时刻同服务器dev分支一样,这样方便我们回滚,查找信息
- 开发的新的功能点分支,推上服务器之后,也不要直接推到dev分支,而是推送到服务器的另一个分支,这样可以让同事进行review,对代码进行修改
- 开发分支的代码粒度要掌握合适,每次让同事进行review的时候,也方便指出代码的中的问题。
- 每次将功能点推上服务器之前,一定要在本地合并服务器上的最新的dev分支,并且解决冲突,这样方便服务器上面的自动合并。
- commit的信息一定要规范:最好是功能点名称+在这个功能点上开发任务的情况
一些git平时常用到的问题
git配置代理
在某些时候,我们的可能因为各种各样的原因,连接不上git服务器,这时候,我们需要对git配置代理,配置git代理的方法可以参照这篇连接:git使用socks代理原理和浏览器翻墙是一样的,只需要手动修改git的local.config命令就行,如果不要,再使用
git config --local --unset http.proxy
git config --local --unset https.proxy
以上两条命令就好可以删除代理了
git commit 命令压缩:
很多时候,我们在feature分支上进行开发的时候,有可能多个commit的信息的显得比较冗杂,也许我们主要其中一个版本号代表的commit信息就好了,这时候,我们可以压缩commit信息:git rebase 压缩commit 信息这篇链接中有教程
git 错误会滚了怎么办?
平时总会进行git的回滚,这个大家都知道,可是,如果回滚错了怎么办?一不小心就把辛辛苦苦写的代码都删了,没事,git这么强的工具,肯定有办法的,我们使用
git reflog
这条命令,来查看我们的项目最完整的git commit记录,然后找到我们的想要回滚到正确的版本号,就可以了。具体教程可以查看这篇链接git 找回已删除的commit记录