Git 如何合并多个连续的提交

我平常的编程喜欢是写一段代码就提交一次,本地一般不攒代码,生怕本地有什么闪失导致白干。但这样就又导致一个问题:查看历史日志时十分不方便,随便找一段提交可以看到:

> git log --oneline
8f06be5 add 12/qemu-hellos.md.
6e28751 新建 12
ca1ecd1 feat: regular commit
97770b2 feat: regular commit
b6735e3 first commit
1addd83 first commit
a7598e0 first commit
bfbc56b first commit

没错,由于频繁的提交,又不好好写 message 导致提交中出现多个相同的 message,同时变更分散在不同的提交中,回溯也十分的不方便。针对这种场景,Git 提供了能力支持,可以将多个提交合并为一个提交,使得提交日志变得清晰可读。

为了方便练习,我提供了一段代码用于创建一个练习仓库:

mkdir git-demo && cd git-demo
echo line1 >> 1 && git commit -a -m "add line into 1"
echo line2 >> 1 && git commit -a -m "add line into 1"
echo line3 >> 1 && git commit -a -m "add line into 1"
echo line4 >> 1 && git commit -a -m "add line into 1"# git log --oneline
339a917 (HEAD -> main) add line into 1
03d13cb add line into 1
0ca1864 add line into 1

此时可以看到提交记录中有多个提交。

git rebase -i 为分支重新指定分支基线

git rebase 命令可以为提交重新设置提交基线,即可以基于某次提交重新构建提交记录,这个功能在提交合入主干分支解决冲突时非常有用,在多人协作开发过程中可以有效避免代码冲突。由于会重新构建提交,因此可以实现在重新构建提交时合并多个提交。

git rebase -i 0ca1864
# 指定基于 0ca1864 记录重新构建提交
# -i 使用交互式界面完成构建

在这里插入图片描述
我们可以指定后续的提交记录的动作,使用 squash 可以将当前提交合并到上一次提交中。

git refloggit reset 后悔药

如果对重新构建的提交记录不满意,可以通过 git reflog 重置提交记录到原来的结果:

git-demo>git reflog
0ca1864 (HEAD) HEAD@{0}: rebase (start): checkout 0ca1864
339a917 (main) HEAD@{1}: commit: add line into 1
03d13cb HEAD@{2}: commit: add line into 1
0ca1864 (HEAD) HEAD@{3}: commit (initial): add line into 1

我们当前在 0ca1864 提交记录上,我们可以指定上一次提交 hash 就能够还原刚刚 squash 的结果了。

git-demo>git reset --hard 339a917
HEAD is now at 339a917 add line into 1
# 此时执行 git log 查看,可以看到提交记录已经还原
git-demo>git log --oneline
339a917 (HEAD, main) add line into 1
03d13cb add line into 1
0ca1864 add line into 1

参考资料

  • git rebase 用法详解与工作原理
  • git rebase详解
  • Git合并多个连续commit
  • progit
  • 【Git】rebase 用法小结

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

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

相关文章

数据基础设施投资将进一步扩大!请问现在开融资融券账户交易佣金利率最低是多少?怎么开户!

请问现在开融资融券账户交易佣金利率最低是多少?怎么开户! 融资融资利率没有最低的说法,利率一般都是相对的,融资融券的利率通常约为6%以上,当然这个也会根据市场货币的政策有所变动,比如现在的的货币政策…

多态--下

文章目录 概念多态如何实现的指向谁调谁?例子分析 含有虚函数类的大小是多少?虚函数地址虚表地址多继承的子类的大小怎么计算?练习题虚函数和虚继承 概念 优先使用组合、而不是继承; 继承会破坏父类的封装、因为子类也可以调用到父类的函数;…

vs2022 开始自己的第一个Python程序

这是针对于vs2022安装和使用教程(详细)创建Python项目的简单示例,旨在示范从项目搭建到程序运行的简单流程,代码就是打印Hello World,适合初次使用vs2022的用户~ 1.以Python为例,下拉到Python应用程序&…

VScode-配置文件

导入配置文件 ShiftCtrlp 输入: import 选择文件 点击确认 导出配置文件 设置选择导出 确认导出 保存为本地文件 保存文件

软件杯 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…

腾讯游戏基于 DeepFlow 的零侵扰可观测性进阶实战

腾讯不仅致力于开发广受欢迎的自研游戏,还与世界各地的知名游戏开发商合作,负责将这些游戏推向市场,让更多玩家享受游戏的乐趣。这些合作伙伴来自全球各地,使用多种多样的技术栈,这为游戏的稳定性维护提出了复杂的挑战…

从零到一:基于 K3s 快速搭建本地化 kubeflow AI 机器学习平台

背景 Kubeflow 是一种开源的 Kubernetes 原生框架,可用于开发、管理和运行机器学习工作负载,支持诸如 PyTorch、TensorFlow 等众多优秀的机器学习框架,本文介绍如何在 Mac 上搭建本地化的 kubeflow 机器学习平台。 注意:本文以 …

常见滤波算法(PythonC版本)

简介 受限于MCU自身的ADC外设缺陷,精度和稳定性通常较差,很多场景下需要用滤波算法进行补偿。滤波的主要目的是减少噪声与干扰对数据的影响,让数据更加接近真实值。 一阶低通滤波算 一阶低通滤波是一种信号处理技术,用于去除信号…

this.$route.back()时的组件缓存

1.this.$route.back()回到上一个路径会重新加载 跳转时,前一个路由的内容会被销毁,当回来时,重新创建树,组件内有保存了距离,没有一开始是0. 2.keep-alive写在router-view上面,这个地方所代表的路由会被保存,因此可以写在上面,保存,当返回时,如果是这个路由,里面的内容是一样…

基于Scala开发Spark ML的ALS推荐模型实战

推荐系统,广泛应用到电商,营销行业。本文通过Scala,开发Spark ML的ALS算法训练推荐模型,用于电影评分预测推荐。 算法简介 ALS算法是Spark ML中实现协同过滤的矩阵分解方法。 ALS,即交替最小二乘法(Alte…

了解与生成火焰图

目录 一、如何看懂火焰图 1、基本特征 2、基本分类 二、如何生成火焰图 1、捕获调用栈 2、折叠栈 3、转换为 svg 格式 4、展示 svg 一、如何看懂火焰图 1、基本特征 (1)纵轴:即每一列代表一个调用栈,每一个格子代表一个函…

云计算对象存储服务

对象存储服务(OSS)中的存储桶(Bucket)叫做‘OBS桶 存储桶(Bucket):存储桶式对象存储服务中用于存储对象的基本容器,类似于文件系统中的文件夹。每个存储桶具有唯一的名称,并且可以在桶中存储任…