背景
分享一下,我在项目里是怎么使用git分支管理的
一、分支管理方式
分支介绍:
- feature_*分支:需求开发分支
- dev分支:本地测试分支
- uat分支:客户测试分支
- release_*分支:发布分支
- master分支:主分支
- hotfix_*分支:热修复分支
其中dev、uat、master分支为长期分支,feature_、release_、hotfix_*为临时分支
简述基本流程:
1、开发从master分支拉取出feature分支;
2、开发在feature分支上做需求开发或bug修复;
3、开发将feature分支合并到dev分支,测试打包发布dev分支到测试环境进行测试;
4、开发将测试通过的feature分支合并到uat分支,运维打包发布uat分支至uat环境,客户在uat分支进行测试;
5、在确认发布生产时,开发leader从master分支拉取出release分支用于发布;
6、开发将uat测试通过的feature分支合并到release分支中,运维打包发布release分支至生产环境;
7、在观察生产环境没有问题之后,开发leader将release分支合并到master分支;
简述热修复流程:
1、如果发现生产版本有bug需要紧急修复,开发从master分支拉取出hotfix分支;
2、开发在hotfix分支中进行bug修改,修复后合并至dev分支进行测试,测试通过后,用hotfix分支进行生产版本发布,并将hotfix分支合并至uat、master分支中;
二、具体操作流程
1、(开发或者开发leader操作)开发从master分支拉取出feature分支
这里有两种方式,一种是在GitLab上进行拉取,一种是在IDEA中进行拉取
1.1、在GitLab上如何新建远程分支
首先登录GitLab,然后选择对应的项目
1.2、在IDEA里创建新的远程分支
在IDEA右下角选择打开Git的Branches,然后选择远程分支中的master分支,再选择New Branch from Selected…
在弹窗中填写分支的名称,并点击Checkout
注意,此时只是创建了本地的分支,远程分支中还不存在该分支
下面选择这个本地分支,进行push
在弹窗中选择push,将本地分支推送到远程,相当于创建了远程分支
这时候远程分支里就多出了这个新的分支
1.3、如果远程分支是在GitLab上创建,或者由别的开发创建的,那么该如何获取这个远程分支并将其拉取到本地呢
如果分支是在GitLab上创建,或者由别的开发创建,我们在IDEA的Branches中找不到,该怎么办,按照下图中的操作,选择Fetch或者右上角的更新都可以
如何将远程分支拉取到本地呢,在IDEA的Branches中选择远程分支,点击Checkout
可以看到将远程分支拉取到了本地,并自动切换到了这个分支上
2、(开发操作)开发在feature分支上做需求开发或bug修复
开发在本地的feature分支上进行开发或者bug修复,之后进行commit和push,这里要注意,commit只是提交到本地分支上,push才会将本地的变动推送到远程分支,具体操作如下,在Local Changes里选中需要提交的文件,右击选择Commit File…
填写备注信息,选择Commit或者Commit and Push…,根据自己的需要,如果只是commit,之后要记得一起push
3、(开发操作)开发将feature分支合并到dev分支,测试打包发布dev分支到测试环境进行测试;
3.1、前提是feature中的代码已经push到了远程分支,先将远程dev分支,Checkout到本地来,如果已经存在本地的dev分支了,那么就切换到本地dev分支,并更新最新的代码
3.2、确保IDEA中现在的分支是dev分支(目标分支),然后选择feature分支(源分支),选择Merge into Current
3.3、执行完上述操作后,相当于将feature分支上的改动在dev本地分支上Commit了,下面要做的就是将dev本地分支push到远程分支上
4、(开发操作)开发将测试通过的feature分支合并到uat分支,运维打包发布uat分支至uat环境,客户在uat分支进行测试;
参考第3步
5、(开发leader操作)在确认发布生产时,开发leader从master分支拉取出release分支用于发布;
参考第1步
6、(开发操作)开发将uat测试通过的feature分支合并到release分支中,运维打包发布release分支至生产环境;
参考第3步
7、(开发leader操作)在观察生产环境没有问题之后,开发leader将release分支合并到master分支;
参考第3步
三、特殊场景如何处理
1、如果开发在第4步的时候发现,feature分支中有部分功能没有通过测试,不可以上线到uat,但其他通过的功能需要上线到uat,怎么办
首先,把本地分支切换到目标分支上(这里代表uat分支);
然后在IDEA的log操作栏中选择源分支(这里代表feature分支),右击选择Cherry-Pick,这样就会将这个log中commit的代码,拉取到本地uat分支,并commit;
然后将本地uat分支push到远程uat分支;
2、本地分支,如果commit错了,想回滚怎么办
在log操作栏中右击想要回退的commit日志,选择Revert Commit或者Undo Commit,Revert Commit是会再生成一条相反的提交,Undo Commit是将提交回退到未提交状态,Undo Commit只能针对最后一条日志
3、远程分支,如果想要回退到历史的版本,怎么操作
在log操作栏中选择想要回退的commit日志,右击选择Reset Current Branch to Here…
在弹窗中选择Hard,点击Reset
然后push本地分支,选择Force Push
注意:Force Push需要慎用,如果你在其他人推送更改之前进行Force push,会覆盖他们的更改。这可能会导致合并冲突和数据丢失
四、Merge和Rebase如何选择
1、下游分支更新上游分支内容的时候使用Rebase
比如我从master上拉取了一个feature分支,一段时候过后,master分支上有代码改动,feature分支上也有代码改动,而这时候,我需要把master的变更拉取到feature分支上,就需要用Rebase,具体操作如下
- 将IDEA的当前分支切换成feature分支;
- 在Branches中选择master分支,再选择Rebase Current onto Selected;
- 最后再push;
2、上游分支合并下游分支内容的时候使用Merge
这个没什么好说的,feature分支往dev、uat、release分支合并时,选择Merge
3、更新当前分支的内容时一定要使用Rebase
比如,现在有个feature分支,有两个开发同时在这个分支上开发,A开发拉取了最新的代码,并开始修改代码了,这时候B开发已经完成自己的开发并且Commit和Push了,这时候分两种情况:
1、A开发需要依赖B开发的代码,他需要更新分支,这时候需要选择Rebase,参考如下步骤
这个默认选中Rebase可以在Setting中设置,具体看下图
2、A开发并不知道B开发已经push了代码,A开发push代码时,也会弹出窗口让选择Merge还是Rebase,也需要选择Rebase,如下图
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/154487.html