Git操作你还在用merge么?了解了解rebase吧!

点击上方 "程序架构之家" 关注公众号 设为星标 终身学习 技术干货 及时送达
往期回顾  

1、原来,这才是 JDK 推荐的线程关闭方式
2、详解 Spring Cloud 版本问题

1前言    

Git作为我们日常开发代码的版本管理,开发分支的管理方面起着很大作用,我们开发过程中分支通常有生产、预发、测试、开发这几个分支,我们会根据项目进行的某个阶段,将代码提交到某个版本上,正常流程是先开发 —>测试 —>预发—>生产,但是通常会有很多版本,有先后上线顺序,并且我们的开发人员也会是多个,在各种因素下项目的开发版本远程分支,以及开发人员的本地分支管理就由为的关键。

2普通开发流程

正常一个版本需要经过的几个阶段,分别是dev、test、uat、master,我们通过下面流程图这么做是没什么问题的,每个阶段去将从master拉取的版本分支,push到对应的分支上进行发布,正常预发和生产环境的代码应该保持一致,test分支由于会有多个版本并行开发,所以代码和预发和生产比起来会有一些不一样。

3多版本并行开发

在多个版本并非开发的时候,对分支的管理就不像上面那么简单了,涉及到多个version,这些版本的上线时间节点也是不同的,意味着上test和uat的时间节点也是不一样的。

这里涉及到多种情况

  1. 在后端开发人员较少的情况下,通常2-3人为例,完全可以从master拉取一个开发分支,分支格式已 服务名+上线时间,例如xxx_20230130这个本地分支,后端开发人员一起在这个分支上进行并行开发,开发阶段将自己的本地分支merge到dev分支,因为只有2-3人所以冲突解决起来还好,有冲突解决冲突。
  2. 后端开发人员较多的情况,通常在5-8人为例,这时候从master分支拉取分支,分支格式就需要已 服务名+姓名缩写+上线时间来命名,尽量每个人在自己命名的分支下进行开发,这样在开发阶段本地测试的时候,可以做到相互不影响,但是在merge到远程分支的时候,解决代码冲突的时候需要认真仔细一些,这种活还是交给心细的人来做吧,测试的时候也需要根据版本上线的优先级进行测试。
  3. 版本比较多的情况,比如一个月会有4-5个版本的开发,那么上线时间也是分4-5个节点,这样就需要每次从先发上线的远程分支,将代码merge到下个版本的本地开发分支上,以此类推。
4Git merge

作为git 合并分支的命令,也是在日常开发过程中经常用到的一个命令,通常我们会将拥有最新代码的一个版本merge到较老的一个版本,实现版本同步。

大体就是这么一个步骤,从刚开始的公共分支,变为master和feature分支, 通过git merge master 命令将master分支merge到feature分支。Merge命令会将前面featrue分支所有的commit提交全部合并为一个新的commit提交。⚠️这里只有会在产生冲突的时候,才能产生新的commit记录。

可以理解为git pull =git fetch +git merge,拉取最新的远程分支,然后将这个分支合并到另一个分支。

在公司开发的时候,通常大家喜欢这个命令,因为简单粗暴,直接将其他分支合并到自己分支,简单好理解。

5Git rebase

作为自己的个人喜好,比较喜欢rebase这个命令,核心理念就是“变基”。

  1. 由上图可看见,通过reabse命令将feature分支延续到了master分支后面。
  2. 在多人开发过程中,如果其他人在master进行commit,这个时候你在feature分支提交了几个commit,这时候你使用rebase命令,会将你的commit提交记录放在master的commit记录的后面,而merge就会将不同分支的commit合并成一个新的commit记录,这就是merge和rebase的不同点。
  3. 本地feature分支和远端的master分支如果是同一条分支的话,可以使用rebase,保证commit的记录的清晰性,这个很关键!

⚠️不要在公共分支使用rebase命令,这样会污染公共分支,这样公共分支就会存在你的commit记录,别人拉取的时候会存在你的最新的commit记录。

6总结

在开发中不仅需要代码质量高,在版本管理上也是由为的重要,上线前漏掉代码的事情,相信大家都曾遇到过,但是这种事情是很危险⚠️的,希望此文章能给大家在日常代码版本管理中提交警惕,合理合并分支,最后祝大家在新的一年,少出bug、多多学习、多多进步。

-End-

精彩推荐  1、不写代码,一句提示生成整个代码库,它在 GitHub 爆火2、45 个 Git 经典操作场景,专治不会合代码,不会解决冲突
3、我一个普通程序员,光靠GitHub打赏就年入70万4、马斯克开源 Twitter 算法!推荐机制正式公开,GitHub Star 数已破万终身学习知识星球
构建高质量的终身学习知识星球,旨在帮助读者构建自己的知识体系。

加入星球后,可以获得高质量的专栏系列内容,还可以对星主进行一对一提问,专栏内容为星主长期积累梳理构成,近期会不断的更新主题,近期已更新终身学习-面试系列,适合正在进行面试准备的读者,根据自身情况构建自己的知识体系。同时还提供专栏学习打卡,以及赠书福利等。



程序架构技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗,加我好友,拉你进群 


感谢关注,分享不易,提升自己,惠泽他人

终身学习,点赞关注不迷路

相关推荐

  • 2300 万,35 岁腾讯员工准备提前退休了
  • 程序员被奖励 38g 黄金空格键,价值近 2 万元,网友:“每次敲击一下都是钱声!”
  • 【值得收藏】优秀前端必备:基本素养、代码规范、开发技巧!!!
  • Vue的@input怎么做到不监听输入法拼音的?90%人不知道~
  • 阿里云史诗级崩溃。。。
  • GitHub 官方开源的字体集「GitHub 热点速览」
  • 上海人开始假装上班了
  • 面试突击:为什么要使用读写锁?它有哪些优势?
  • ChatGPT版iPhone终面世!Sam Altman联手苹果前员工祭出苹果杀手
  • 阿里云严重故障,阿里云、钉钉、闲鱼、淘宝、语雀等都崩了...
  • Kaggle知识点:检测 LLMs文本的方法
  • ​1112.AI日报:张朝阳谈 AI - 十年之内不能低估它,两年之内不能高估它
  • 项目总延期?需求乱插队?我们应如何做好项目管理
  • [开源]基于Go+Vue实现的OpenLDAP后台管理项目,简单易用清晰美观
  • 阿里云严重故障,阿里云、钉钉、闲鱼、淘宝、语雀等都崩了...
  • 一个指令,释放 1000 行屎山代码
  • 从ID-based到LLM-based:可迁移推荐系统发展
  • EMNLP 2023 | 基于知识图谱嵌入的关系感知集成学习算法
  • 开源跨平台终端仿真软件,多协议支持,个性化配置,无缝体验
  • 再看领域微调大模型的主流基座和评测数据集:项目地址及论文指引