当前位置: 首页 > news >正文

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交

Git bisect 命令官方文档

git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误
使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交
以及一个已知在错误出现之前的 “好” 提交
然后 git bisect 在这两个端点之间挑选一个提交
并询问你所选的提交是 “好” 还是 “坏”
它继续缩小范围,直到找到引入该修改的确切提交

举例:
文件A.txt正确内容应该是 number = 28

某一时刻发现文件A.txt 中的内容被错误的修改为 number = 30

如果中间提交了许多次,很难定位具体是哪一次提交改错了

首先执行命令 git reflog 查看提交日志

$ git reflog
2fe8002 (HEAD -> master_2, origin/master_2) HEAD@{0}: commit: xiugai
f3f9398 HEAD@{1}: commit: xiugai
31e63a6 HEAD@{2}: commit: xiugai
3f93ea1 HEAD@{3}: commit: xiugai
be6f911 HEAD@{4}: commit: xiugai
8fdfa9c HEAD@{5}: commit: xiugai
b20faae HEAD@{6}: commit: xiugai
05b7272 HEAD@{7}: commit: xiugai
49e2e88 HEAD@{8}: commit: xiugia
b680d3e HEAD@{9}: commit: xiugai
4ba8bd4 HEAD@{10}: commit: xiugai
d4aa8ab HEAD@{11}: commit: xiugai
93383c8 HEAD@{12}: commit: xiugai
147a3a2 HEAD@{13}: commit: xiugai
40737a3 HEAD@{14}: commit: xiugai
aac5d98 HEAD@{15}: commit: xiugai

上面每一行开头的 前7位 就是一个 commit Id

首先定位一个 已经错误的 commit 如 2fe8002
只要找到一个错误的commit就行了,具体从哪开始错的并不关心

然后定位一个 正确的 commit 如 aac5d98
随便找一个 commit 只要是它是正确的

执行命令 git bisect start badCommit goodCommit

$ git bisect start 2fe8002 aac5d98
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[49e2e8877b14ad581f940dbd98bebf56a4a57d3b] xiugia

输入命令后指向了 commit 49e2e88

执行命令 git branch

$ git branch
* (no branch, bisect started on master_2)mainmastermaster_1master_2production/1.1production/2.1

当前不在任何分支上,并且提示 bisect started on master_2

执行命令 git status

$ git status
HEAD detached at 49e2e88
You are currently bisecting, started from branch 'master_2'.(use "git bisect reset" to get back to the original branch)nothing to commit, working tree clean

可以看到当前在一个游离的提交 49e2e88 位置
也就是帮我们切换到了 49e2e88 提交的状态,此时直接打开项目中文件,查看是否正确
如果正确 执行命令 git bisect good
如果错误 执行命令 git bisect bad

经过比对,发现此时还是错误的,那么错误一定是在下面这一部分提交中

49e2e88 HEAD@{8}: commit: xiugia
b680d3e HEAD@{9}: commit: xiugai
4ba8bd4 HEAD@{10}: commit: xiugai
d4aa8ab HEAD@{11}: commit: xiugai
93383c8 HEAD@{12}: commit: xiugai
147a3a2 HEAD@{13}: commit: xiugai
40737a3 HEAD@{14}: commit: xiugai
aac5d98 HEAD@{15}: commit: xiugai

执行命令

$ git bisect bad
Bisecting: 3 revisions left to test after this (roughly 2 steps)
[93383c8f85ac09d021dba1c45c55813339cba713] xiugai

现在指向了 93383c8f85ac09d021dba1c45c55813339cba713
执行命令 gitstatus

$ git status
HEAD detached at 93383c8
You are currently bisecting, started from branch 'master_2'.(use "git bisect reset" to get back to the original branch)nothing to commit, working tree clean

当前已经切换到了 93383c8

经过比对,发现此时是正确的,那错误一定是下面这一部分提交中

49e2e88 HEAD@{8}: commit: xiugia
b680d3e HEAD@{9}: commit: xiugai
4ba8bd4 HEAD@{10}: commit: xiugai
d4aa8ab HEAD@{11}: commit: xiugai
93383c8 HEAD@{12}: commit: xiugai

执行命令 git bisect good

$ git bisect good
Bisecting: 1 revision left to test after this (roughly 1 step)
[4ba8bd490288126ac2319dc52d4e86e1c0ccecbb] xiugai

到 4ba8bd4 经过比对,发现此时还是正确的,那错误一定是下面这部分提交中
执行命令 git bisect good

$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[b680d3e5aa93692ad5b847be066753b579eb437d] xiugai

到 b680d3e 经过比对,发现此时是错误的,那错误一定是在下面部分提交中

b680d3e HEAD@{9}: commit: xiugai
4ba8bd4 HEAD@{10}: commit: xiugai

执行命令 git bisect bad

$ git bisect bad
b680d3e5aa93692ad5b847be066753b579eb437d is the first bad commit
commit b680d3e5aa93692ad5b847be066753b579eb437d (HEAD)
Author: liqiang <liqiangeastsun@163.com>
Date:   Fri Feb 14 16:48:33 2025 +0800xiugaiA.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

日志显示 b680d3e5aa93692ad5b847be066753b579eb437d is the first bad commit 这个第一个导致错误的提交
那么详细查看 b680d3e 这个提交具体修改了什么

退出执行命令

$ git bisect reset
Previous HEAD position was b680d3e xiugai
Switched to branch 'master_2'
Your branch is up to date with 'origin/master_2'.

执行命令 git branch

$ git branchmainmastermaster_1
* master_2production/1.1production/2.1

帮我们自动切换到 master_2 分支

相关文章:

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时&#xff0c;首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...

一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法

论文标题 中文标题&#xff1a;一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题&#xff1a;A Joint Routing and Time-Slot Scheduling Load Balancing Algorithm for In-Vehicle TSN 作者信息 Bo Xu, Xinrui Chang, Dongyang Xu, Shuo Wang, Uzair As…...

【弹性计算】容器、裸金属

容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术&#xff0c;Docker 和虚拟机和谐共存&#xff0c;用户也找到了适合两者的应用场景&#xff0c;二者对比如下图…...

Golang关于结构体组合赋值的问题

现在有一个结构体&#xff0c;其中一个属性组合了另外一个结构体&#xff0c;如下所示&#xff1a; type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f; 文章目录 DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f;一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT&#xff1a;谁更胜一筹&#xff1f;2.1 语言生成能力评测对比场景…...

新建github操作

1.在github.com的主页根据提示新建一个depository。 2.配置用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 3.生成ssh秘钥 ssh-keygen -t rsa 找到public key 对应的文件路径 cat /root/.ssh/id_rsa 复制显…...

Spring Boot 携手 DeepSeek:开启智能交互新时代

前言 在当今数字化浪潮汹涌澎湃的时代,人工智能技术正以前所未有的速度改变着我们的生活和工作方式。大语言模型作为人工智能领域的一颗璀璨明星,凭借其强大的自然语言处理能力,为各个行业带来了新的发展机遇。DeepSeek 作为一款性能卓越的大语言模型,以其高效、准确的文本…...

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环…...

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…...

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 绑定库&#xff0c;用于处理地理数据。由于 GDAL 依赖较多&#xff0c;在 Windows 上的安装相对复杂&#xff0c;本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手&#xff08;Copilot、DeepSeek、GPT-4o Mini&#xff09; &#x1f4ca; 引言 近年来&#xff0c;AI 编程助手已成为开发者的高效工具&#xff0c;它们可以加速代码编写、优化代码结构&#xff0c;并提供智能提示。本文介绍如何在 IntelliJ I…...

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题&#xff1f;如何高效地准备这些题目&#xff0c;提升自己的竞争力&#xff1f;本文将为你整理一些经典的数据库笔试题及其答案&#xff0c;助你备战面试。 金三银四马上来了&#xff0c;测试年限较短难免会碰到笔试题&#xff0c;最近…...

3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论

AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...

2D 游戏艺术、动画和光照

原文&#xff1a;https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元&#xff0c;人物大小在0.5~2单元 PPU &#xff1a;单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商户功能模块&#xff1a;用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环境&#x…...

【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】

嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…...

java原子操作类实现原理

文章目录 AtomicLong实现原理递增和递减操作代码总结 LongAdder实现原理实现原理LongAdder 代码分析构造方法sum方法reset方法sumThenReset方法longValue方法add 方法longAccumulate 方法 总结 JUC 包提供 了一系列的原子性操作类&#xff0c;这些类都是使用非阻塞算法 CAS 实现…...

网络安全-攻击流程-传输层

传输层攻击主要针对OSI模型的第四层&#xff0c;涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程&#xff0c;以及防御措施&#xff1a; 1. SYN洪水攻击&#xff08;TCP半连接攻击&#xff09; 攻击流程&#xff1a; 目标选择&#xff1a;确定目标服务器的IP地址和开…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...