当前位置:首页 > 科技  > 软件

你合并代码用 Merge 还是用 Rebase ?

来源: 责编: 时间:2024-07-06 07:45:15 321观看
导读你们平时合并代码的时候用 merge 还是 rebase?我问了一圈,发现有些人不仅没用过 rebase,而且根本就没听说过。别慌,不要紧,没有 rebase 也不影响开发,不影响合并,不影响发版!我用 Git 很长时间也一直根本没听过 rebase 为何物

你们平时合并代码的时候用 merge 还是 rebase?bVK28资讯网——每日最新资讯28at.com

我问了一圈,发现有些人不仅没用过 rebase,而且根本就没听说过。别慌,不要紧,没有 rebase 也不影响开发,不影响合并,不影响发版!bVK28资讯网——每日最新资讯28at.com

我用 Git 很长时间也一直根本没听过 rebase 为何物,只知道合并分支就是 merge ,直到有一个新入职的同事跟我说:“为什么合并分支不用 rebase 呢?我之前公司都用 rebase,不怎么用merge。"bVK28资讯网——每日最新资讯28at.com

在那之后,我还头一次听说 rebase 这个命令。bVK28资讯网——每日最新资讯28at.com

只有在涉及到分支合并的时候才谈到 merge 和 rebase,如果没有合并的需求,那怎么整都无所谓,就像我自己的小产品,从头到尾都只有个 main 分支,开发人只有我自己,也没有冲突一说,有时候写好几天都不带push一次的。bVK28资讯网——每日最新资讯28at.com

用到分支合并基本都是多人协作的团队项目,通常会有一个主分支,然后有开发分支,有时候还会有一些临时的 feature 分支。bVK28资讯网——每日最新资讯28at.com

merge 合并分支

同一个分支也可能出现 merge 的情况,例如我这边有一个老项目平时基本上没其他人动,所以我在修改这个项目的时候基本上想不起来要先pull 一下,当然了,这是一个非常不好的习惯,所以有时候一push代码,发现有人竟然提交新代码上去了,所以这种情况下就自动 merge 一下。bVK28资讯网——每日最新资讯28at.com

今天主要讨论的是分支合并时的 merge。bVK28资讯网——每日最新资讯28at.com

下图是 merge 合并分支时前后版本变化的情况。bVK28资讯网——每日最新资讯28at.com

图片图片bVK28资讯网——每日最新资讯28at.com

merge 会创建一个新的合并提交,将两个分支的历史记录保留在一起。bVK28资讯网——每日最新资讯28at.com

它的特点就是日志保存完整,不管你之前合并进来的那个版本有多少个提交历史,都会被完整的合并到目标分支。bVK28资讯网——每日最新资讯28at.com

以下是使用 merge 合并后的主分支 Graph 情况,看上去是不是有点乱。bVK28资讯网——每日最新资讯28at.com

图片图片bVK28资讯网——每日最新资讯28at.com

假设有两个分支,main 和 dev分支,在 dev 分支上开发,然后合并到 main 分支,合并的大致流程如下。bVK28资讯网——每日最新资讯28at.com

git checkout maingit pull origin maingit merge dev# 解决冲突后git commit -m "Merge dev into main"git push origin main

Rebase 合并分支

rebase 会将分支上的更改重新应用在目标分支上,重写提交历史。bVK28资讯网——每日最新资讯28at.com

图片图片bVK28资讯网——每日最新资讯28at.com

rebase 方式提交的版本历史是线性的,不会创建新的合并提交,历史记录非常干净。bVK28资讯网——每日最新资讯28at.com

同样地,假设当前有两个分支,main 和 dev,用 rebase 方式合并分支的大致流程如下。bVK28资讯网——每日最新资讯28at.com

git checkout devgit pull origin devgit rebase main# 解决冲突后git rebase --continuegit push origin dev --force

合并压缩

在rebase 的时候还可以使用 squash 参数来压缩提交记录,例如下图,Feature 1 分支的 A、B、C 三个提交记录,使用 rebase squash 后会在主分支变为一个提交记录 F。bVK28资讯网——每日最新资讯28at.com

图片图片bVK28资讯网——每日最新资讯28at.com

使用方式如下,git rebase -i HEAD~3 命令准备压缩最近的3次提交,然后在编辑模式下将pick 改为 squash,最后推送到远端仓库。bVK28资讯网——每日最新资讯28at.com

适合那种:bVK28资讯网——每日最新资讯28at.com

git checkout devgit rebase -i HEAD~3# 进入编辑模式后,修改 `pick` 为 `squash`# 保存并关闭编辑器后,编辑新的提交信息并保存git push origin dev --force

选择使用哪种方法

具体使用哪种方式合并要根据场景和习惯而定,没有绝对的好坏。bVK28资讯网——每日最新资讯28at.com

使用 merge,如果你希望保留分支的历史记录,并且不介意有合并提交。适用于团队合作时保留每个人的工作记录。bVK28资讯网——每日最新资讯28at.com

使用 rebase,如果你希望保持提交历史的简洁和线性,适用于希望干净历史的项目。bVK28资讯网——每日最新资讯28at.com

有些公司规定只能用 rebase,它更适合那种只有单一版本的项目,只有一个主分支一直向前推进,且没有多个分支并行的情况,例如一个产品既要维护2.x 版本又要维护3.x版本,那用 rebase就不合适了。bVK28资讯网——每日最新资讯28at.com

之前 Vue 项目就是用 rebase 方式合并分支的。bVK28资讯网——每日最新资讯28at.com

图片 图片 bVK28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-99172-0.html你合并代码用 Merge 还是用 Rebase ?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 摆脱 if-else 束缚的清洁编码之旅:这些技术帮你实现

下一篇: 携程门票秒杀系统的设计与实践

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
Top