跳至主要內容

开发git分支管理

Neo大约 5 分钟编程git

在日常开发中,git分支管理是必不可少的。如何组织构建一个良好的git分支尤其重要,这里简单记录一下相关知识。

分支管理理解

常见分支

我们可以把git的分支想象成《西游记》里的角色,每个角色都有自己的身份和任务,但是他们之间也可以互相协作和交流。下面是一些常见的分支和对应的角色:

master分支:这是git的默认分支,它代表了项目的正式版本,也就是最终要交付给用户的产品。我们可以把它比作唐三藏,他是取经的主要人物,也是最终要把佛经带回东土的使者。

develop分支:这是一个用于开发的分支,它代表了项目的最新状态,也就是正在进行中的版本。我们可以把它比作孙悟空,他是唐三藏的大弟子,也是最有本事的战斗力,他可以在开发分支上尽情地施展自己的神通,然后在合适的时机,把成果合并到master分支上。

feature分支:这是一个用于开发新功能的分支,它代表了项目的一个特定需求,也就是一个独立的模块。我们可以把它比作猪八戒,他是唐三藏的二弟子,也是最爱吃喝玩乐的角色,他可以在feature分支上开发自己感兴趣的功能,然后在完成后,把功能合并到develop分支上。

bug分支:这是一个用于修复错误的分支,它代表了项目的一个特定问题,也就是一个需要改正的缺陷。我们可以把它比作沙悟净,他是唐三藏的三弟子,也是最沉默寡言的角色,他可以在bug分支上修复发现的错误,然后在解决后,把错误合并到develop分支上。

release分支:这是一个用于发布的分支,它代表了项目的一个稳定版本,也就是一个即将交付的产品。我们可以把它比作白龙马,他是唐三藏的四弟子,也是最忠诚有礼的角色,他可以在release分支上进行最后的测试和调整,然后在通过后,把版本合并到master分支和develop分支上。

我们先反向思考一个产品的形成:

  • 首先开发最终目的是有一个项目产品,可以交付给用户使用的版本,这个就是正式版的master主分支
  • 在发布正式版之前,还有一个最终测试版pre-release分支,这上面最终通过测试,才会合并到master主分支进行发布。
  • 那分支pre-release怎么来的呢,当然是我们日常开发更新来的,所以我们还需要一个daily日常分支,用以我们日常开发整合测试 。
  • 最后来说,日常分支肯定不止一个开发者维护,所以,我们再给每个开发者创建一个分支,也就是个人分支,个人开发完成后,将代码同步到daily日常分支。
  • 开发机:一般每个开发人员都会有一台,一般公司可能没有,毕竟人手一台服务器,开销还是挺大的。

接着我们便可以正向得出一般的开发流程:

  1. 自己分支开发,本地自测,如果有开发机,就直接部署个人分支即可,最终部署公共分支时再解决冲突
  2. pull daily最新的到本地,合并到daily(你也可以直接合到远程daily,这样就不用先pull daily了;pull daily的意图是不覆盖别人已经合到daily的代码)进行日常环境测试
  3. 合并到pre(pull的操作同daily一致)进行预发测试
  4. 合并到(pull的操作同daily一致)master,进行发版操作

分支冲突

开发中难免会遇到冲突,比如两个开发者同时开发修改同一个文件,那么很容易就产生冲突。

解决冲突:

  • 一旦出现冲突,如果只是位置冲突,那么合并时两者代码都保留即可;
  • 如果是代码修改点冲突,一定要和冲突对应分支的开发对齐,

分支合并举例

我有三个分支,分别是main,a,b,main是主分支,a和b都是从main分出来的,具体内容如下。

main分支内容
main分支内容
a分支内容
a分支内容
b分支内容
b分支内容

接下来,我将a分支的修改,合并到main分支。操作如下,

  • 将当前分支切到main分支

    checkout current branch
    checkout current branch
  • 选择a分支合并到main分支,我们可以选择合并全部a提交(图1),或者合并指定提交(图2)

    图1
    图1
    图2
    图2
  • 冲突合并:这里由于之前我修改了这部分代码,所以提醒两次合并有冲突,需要手动进行合并,这里选择接受右边a的代码

    冲突显示
    冲突显示
    手动合并
    手动合并
  • 最终,a所有的修改被合并到了main分支上。

    最终结果
    最终结果

特别感谢好友 dragonyu的指导。