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 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...
一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法
论文标题 中文标题:一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题: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.容器和云原生 容器技术 起源于虚拟化技术,Docker 和虚拟机和谐共存,用户也找到了适合两者的应用场景,二者对比如下图…...
Golang关于结构体组合赋值的问题
现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示: type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?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.项目介绍 系统角色:管理员、普通用户功能模块:用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型:SSM,Vue(后端管理web),uniapp等测试环…...
HTML的入门
一、HTML HTML(HyperText Markup Language,超文本标记语言)是一种用来告知浏览器如何组织页面的标记语言。 超文本:就是超越了文本;HTML不仅仅可以用来显示文本(字符串、数字之类),还可以显示视频、音频等…...
Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1
Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…...
【金三银四】分享数据库笔试题及答案~~
你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。 金三银四马上来了,测试年限较短难免会碰到笔试题,最近…...
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 游戏艺术、动画和光照
原文:https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元,人物大小在0.5~2单元 PPU :单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...
基于SSM+uniapp的鲜花销售小程序+LW示例参考
1.项目介绍 系统角色:管理员、商户功能模块:用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型:SSM,Vue(后端管理web),uniapp等测试环境&#x…...
【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】
嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…...
java原子操作类实现原理
文章目录 AtomicLong实现原理递增和递减操作代码总结 LongAdder实现原理实现原理LongAdder 代码分析构造方法sum方法reset方法sumThenReset方法longValue方法add 方法longAccumulate 方法 总结 JUC 包提供 了一系列的原子性操作类,这些类都是使用非阻塞算法 CAS 实现…...
网络安全-攻击流程-传输层
传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
