git合并代码方法

news/2024/9/4 4:34:41/文章来源:https://www.cnblogs.com/cheyunhua/p/18290619

你合并代码用 merge 还是用 rebase ?

macrozheng 2024年07月08日 14:10 江苏 1人听过
 

以下文章来源于古时的风筝 ,作者风筝

古时的风筝.

写代码是一种爱好,写文章是一种情怀。

图片

mall学习教程官网:macrozheng.com

你们平时合并代码的时候用 merge 还是 rebase?

我问了一圈,发现有些人不仅没用过 rebase,而且根本就没听说过。别慌,不要紧,没有 rebase 也不影响开发,不影响合并,不影响发版!

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

在那之后,我还头一次听说 rebase 这个命令。

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

用到分支合并基本都是多人协作的团队项目,通常会有一个主分支,然后有开发分支,有时候还会有一些临时的 feature 分支。

merge 合并分支

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

今天主要讨论的是分支合并时的 merge。

下图是 merge 合并分支时前后版本变化的情况。

图片

merge 会创建一个新的合并提交,将两个分支的历史记录保留在一起。

它的特点就是日志保存完整,不管你之前合并进来的那个版本有多少个提交历史,都会被完整的合并到目标分支。

以下是使用 merge 合并后的主分支 Graph 情况,看上去是不是有点乱。

图片

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + JDK 17 + Vue 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

  • Boot项目:https://github.com/macrozheng/mall
  • Cloud项目:https://github.com/macrozheng/mall-swarm
  • 视频教程:https://www.macrozheng.com/video/

项目演示:图片

假设有两个分支,main 和 dev分支,在 dev 分支上开发,然后合并到 main 分支,合并的大致流程如下。

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

Rebase 合并分支

rebase 会将分支上的更改重新应用在目标分支上,重写提交历史。

图片image.png

rebase 方式提交的版本历史是线性的,不会创建新的合并提交,历史记录非常干净。

同样地,假设当前有两个分支,main 和 dev,用 rebase 方式合并分支的大致流程如下。

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

合并压缩

在rebase 的时候还可以使用 squash 参数来压缩提交记录,例如下图,Feature 1 分支的 A、B、C 三个提交记录,使用 rebase squash 后会在主分支变为一个提交记录 F。

图片

使用方式如下,git rebase -i HEAD~3 命令准备压缩最近的3次提交,然后在编辑模式下将pick 改为 squash,最后推送到远端仓库。

适合那种

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

选择使用哪种方法

具体使用哪种方式合并要根据场景和习惯而定,没有绝对的好坏。

使用 merge,如果你希望保留分支的历史记录,并且不介意有合并提交。适用于团队合作时保留每个人的工作记录。

使用 rebase,如果你希望保持提交历史的简洁和线性,适用于希望干净历史的项目。

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

之前 Vue 项目就是用 rebase 方式合并分支的。

图片

Github上标星60K的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验,同时提高自己独立开发一个项目的能力,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。

图片

整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,你也可以点击链接 mall视频教程 了解更多内容。

推荐阅读

  • 全面升级!一套基于Spring Boot 3+JDK17的实战项目!
  • 69K Star!这是我见过最强的开源电商系统 !!
  • Github标星60K!一套完整的项目实战教程来了,主流Java技术一网打尽!
  • 看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...
  • 支付系统就该这么设计,稳的一批!
  • 权限系统就该这么设计,稳的一批!
macrozheng
专注Java技术分享,解析优质开源项目。涵盖SpringBoot、SpringCloud、Docker、K8S等实用技术,作者Github开源项目mall(50K+Star)。
297篇原创内容

图片

阅读 9056
留言 3
写留言
  •  
    我就习惯这么干、定期用rebase整理后结合no-ff再合并,历史记录舒服多了
     
     
  •  
    用git五年了,从来不用命令的我路过此地。。
     
     
  •  
    习惯用git小乌龟了,都是先fetch再rebase
     
     
已无更多数据
 
 
 
 
 
 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/740748.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秒杀圣经(2):10Wqps秒杀,16大架构绝招,一文帮你秒变架构师

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

写入多维表格失败

原因一: 没有获取到正确的table_id 解决办法将多维表格在浏览器打开,url的这部分就是table_id,如下图。由于模板中的设置多维表格模块需要输入网址,所以建议将网址和table_id一起复制

【算法篇】KMP算法,一种高效的字符串匹配算法

我们今天了解一个字符串匹配算法-KMP算法,内容难度相对来说较高,建议先收藏再细品!!! KMP算法我们今天了解一个字符串匹配算法-KMP算法,内容难度相对来说较高,建议先收藏再细品!!!KMP算法的基本概念 KMP算法是一种高效的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.…

飞书集成平台,流程触发器触发,没有运行日志

原因:飞书平台自动关联自建应用时,回调地址生成存在问题。解决办法:将飞书的触发器回调地址的内容,复制到关联的自建应用的事件回调地址中

NOIP2024模拟1

NOIP2024模拟1\(T1\) GHzoj 3752. 分糖果 \(100pts\)设最终答案中有 \(a\) 个小组中的小朋友的糖数 \(\mod 3\) 均等于 \(1\) , \(b\) 个小组中的小朋友的糖数 \(\mod 3\) 互不相等, \(c\) 个小组中的小朋友的糖数 \(\mod 3\) 均等于 \(0\) , \(d\) 个小组中的小朋友的糖数 …

工具安装

虚拟机——VMware安装 Vmware官方地址kali镜像 kali镜像win10镜像(教育版) 工具站卸载工具——geek安装文件检索工具——everything everything下载地址截图工具——snipaste snipaste下载地址解压缩工具——7.zip 7.zip下载地址 文本编辑器——notepad++ notepad++下载地址 …

分拆、杨图和杨表

分拆、杨图和杨表\(1.\) 定义和性质\(\textbf{定义 1 } \text{(分拆)}\) 定义整数 \(n\) 的一个拆分为 \(\lambda = (\lambda_1, \lambda_2, \dots, \lambda_m)\),满足 \(\forall i, \lambda_i \ge \lambda_{i + 1}\),且 \(\lambda_i\) 的加和为 \(n\)。记其为 \(\lambda \vd…

常见的概率分布

1.离散型分布 1.1 两点分布(伯努利分布/贝努利分布/0-1分布) 称随机变量 \(X\) 服从参数为 \(p\) 的伯努利分布,如果它分别以概率 \(p\) 和 \(1-p\) 取 1 和 0 为值。​ \[P(X=k)=p^k(1-p)^{1-k}, \quad k=0,1\\ X\sim B(1,p)\\ E(X)=p\\ D(X)=p(1-p) \]1.2 二项分布 n次独立…

python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)

python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。 逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。 效果图:代码:import openpyxl from openpyxl.styles import PatternFill from o…

生成扩散模型漫谈(二):DDPM = 自回归式VAE

在文章《生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼》中,我们为生成扩散模型DDPM构建了“拆楼-建楼”的通俗类比,并且借助该类比完整地推导了生成扩散模型DDPM的理论形式。在该文章中,我们还指出DDPM本质上已经不是传统的扩散模型了,它更多的是一个变分自编码器VAE,实际…

生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪

到目前为止,笔者给出了生成扩散模型DDPM的两种推导,分别是《生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼》中的通俗类比方案和《生成扩散模型漫谈(二):DDPM = 自回归式VAE》中的变分自编码器方案。两种方案可谓各有特点,前者更为直白易懂,但无法做更多的理论延伸和定量…

ComfyUI进阶篇:ComfyUI核心节点(四)

ComfyUI核心节点(四) 前言: 学习ComfyUI是一场持久战。当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点。面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措。在这篇文章中,我们将用通俗易懂的语言对ComfyUI的核心节点进行系统梳理,并详细解释…