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

news/2024/7/7 5:50:13 标签: git, elasticsearch, 大数据

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

> 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__31">git rebase -i 为分支重新指定分支基线

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

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

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

git_refloggit_reset__43">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.niftyadmin.cn/n/5460855.html

相关文章

物联网学习1、什么是 MQTT?

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通…

pytorch手写dataset

pytorch手写dataset 当你创建一个PyTorch自定义的Dataset类时,你需要继承torch.utils.data.Dataset类,并实现__len__和__getitem__方法。下面是一个简单的示例,假设你的数据集包含特征和标签: import torch from torch.utils.dat…

Android9.0以后不允许HTTP访问的解决方案

背景 自 Android 9.0 起,默认禁止使用 HTTP 进行访问。当尝试使用 HTTP 链接时,将会收到以下错误信息: "Cleartext HTTP traffic to " host " not permitted"为了解决这一问题,下面介绍两种破解方法&…

给网站添加安全措施 -- http -> https

快速上手 1、准备:腾讯云http域名、SSL证书、Nginx服务器。 2、在腾讯云平台内-我的域名,找到指定域名后添加解析映射IP。 3、腾讯云上搜索SSL证书,然后申请免费证书(1个工作日内通过)。 4、证书通过后,下…

【Node.js】图片验证码识别

现在越来越多的网站采取图片验证码,防止机器恶意向服务端发送请求。但是常规的图片验证码也不是非常安全了。有非常多第三方库可以对图片上的数字文字等进行识别。 代码实现 首先安装依赖: npm install node-native-ocrnpm:(node-native-oc…

love 2d Lua 俄罗斯方块超详细教程

源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/love2d-game.git 一直在找Lua 能快速便捷实现图形界面的软件,找了一堆,终于发现love2d是小而美的原生lua图形界面实现的方式。 并参考相关教程做了一个更详细的&#x…

理解游戏服务器架构-逻辑底层架构

目录 前言 什么是逻辑底层架构 逻辑底层架构的职责 1)Thread-线程 线程管理 线程通讯 线程安全锁机制 2)Network-网络 网络模型 网络消息协议 断线重连 网络安全 防范重复消息 防范篡改消息内容 防范篡改内存数据 网络承载 3&#xff0…

Swagger文档转html和pdf格式_亲测成功

Swagger文档转html和pdf格式_亲测成功 spring maven项目 使用Swagger作为接口文档时,可以导出html和pdf格式. maven项目pom.xml引入 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncodin…