Git删除指定历史版本

问题:

在Git提交版本,有时有些小版本相比较于后续的大版本,都会包含,且后续存在的意义不太大,一般认为是可以删除的。或者,中间一些版本有问题但是也提交了,拉取这些版本根本没用,这些版本也可以或者应该删除。那么,怎么删除指定版本呢?删除后Git版本流会是什么样的结构呢?

下面是查到的一些方法:

1、使用git revert

以下来自百度文心快码。部分文字可能有些不通。

git revert命令详解

git revert是一个Git命令,用于撤销一些现有的提交,并记录一些新的提交以反映这些更改的撤销。它不是从项目历史记录中删除提交,而是通过创建相反内容的新提交来撤销指定的更改,这有助于维护修订历史记录的完整性。

一、基本语法

bash

git revert <commit>...

这里的<commit>是你想要撤销的提交的哈希值或引用,你可以指定一个或多个提交。

二、常见用法

  1. 撤销最新提交

bash

git revert HEAD

这会撤销你最近的提交,并创建一个新的提交来反映这一撤销。

  1. 撤销前一次提交

bash

git revert HEAD^

HEAD^表示上一次提交,所以这条命令会撤销上一次提交。

  1. 撤销多个连续的提交

如果你想要撤销多个连续的提交,可以使用以下命令:

bash

git revert commit_id_start..commit_id_end

这里commit_id_start是你想要开始撤销的提交的哈希值,commit_id_end是你想要结束撤销的提交的哈希值(不包括这个提交本身)。注意,这个范围是左闭右开的。

如果你想要撤销多个不连续的提交,你需要为每个提交分别执行git revert命令。

三、选项

  1. --edit 或 -e:允许你在提交撤销更改之前编辑提交消息。默认情况下,这个选项是启用的,除非你使用了--no-edit选项。
  2. --mainline parent-number 或 -m parent-number:当你处理一个具有多个父提交的提交(例如,由git merge创建的合并提交)时,这个选项允许你指定哪个父提交应该被视为主线。

四、注意事项

  1. 在执行git revert之前,请确保你的工作目录是干净的,即没有未提交的更改。
  2. git revert会创建一个新的提交来撤销先前的更改,所以你的提交历史会保留下来。
  3. 如果你想要丢弃工作目录中的所有未提交更改,应该使用git reset命令,特别是--hard选项。但是请注意,这将会改变你的提交历史。

五、示例

假设你有以下的提交历史:

text

* abc1234 (HEAD -> master) Merge feature-branch into master

* d7e6b2d (feature-branch) Add new feature

* 3a6c0f2 (master) Initial commit

其中,abc1234是一个合并提交,feature-branch被合并进了master。现在,你想撤销这个合并提交,并希望保留master分支的变更,因此使用命令:

bash

git revert -m 1 abc1234

这个命令会创建一个新的提交,撤销合并操作中的更改,实际上它将会恢复到abc1234合并之前的状态,但历史记录仍会保留合并提交。新的提交将会与abc1234之后的提交一起继续保留在历史中。

小结:

        个人感觉,revert的意思是回滚、恢复。并不是删除,使用后即是回滚到指定版本之前的版本,只不过,回滚并不删除指定版本及之后已经提交的版本在Git中的记录?那么,这种回滚只适用于某个版本之后的版本后续可能不需要用的情况吧。而不是开篇问题提到的,只是将某个版本删除,版本库的最好这个版本记录都没有了,而且,其他的版本都不影响,即,这个版本之后提交的版本,依然按顺序全部保留。

个人感觉revert不满足要求。

2、DeepSeek给出的一种:

 使用 git filter-repo 彻底清除提交

(适用于删除含敏感信息的大文件或提交)

bash

# 安装 git-filter-repo
pip install git-filter-repo# 删除指定提交(如 abc123)
git filter-repo --invert-paths --commit abc123# 强制推送清理后的仓库
git push origin --all --force

尝试,没效果。第一步安装没问题,第二步,报语法错误,不成功。第三步执行时,报不需要推送,没有更新。回到远程Git分支看,提交记录确实没有变化。

总结:

那么,是Git没有这种操作么?不允许?还是没找到办法,未完,继续探索中。

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

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

相关文章

使用 Pandas 进行多格式数据整合:从 Excel、JSON 到 HTML 的处理实战

前言 在数据处理与分析的实际场景中&#xff0c;我们经常需要整合不同格式的数据&#xff0c;例如 Excel 表格、JSON 配置文件、HTML 报表等。本文以一个具体任务&#xff08;蓝桥杯模拟练习题&#xff09;为例&#xff0c;详细讲解如何使用 Python 的 Pandas 库结合其他工具&…

今日行情明日机会——20250425

指数依然在震荡&#xff0c;等待方向选择&#xff0c;整体量能不搞但个股红多绿少。 2025年4月25日涨停板行业方向分析如下&#xff1a; 一、核心行业方向及驱动逻辑 一季报增长&#xff08;17家涨停&#xff09; 核心个股&#xff1a;惠而浦、鸿博股份、卫星化学驱动逻辑&am…

Python 快速获取Excel工作表名称

文章目录 前言准备工作Python 获取Excel中所有工作表的名称Python 获取Excel中隐藏工作表的名称 前言 在数据分析与办公自动化领域&#xff0c;通过Python处理Excel文件已成为必备技能。通过获取工作表名称&#xff0c;我们可以&#xff1a; 快速了解文件结构自动化处理多工作…

宁德时代25年时代长安动力电池社招入职测评SHL题库Verify测评语言理解数字推理真题

测试分为语言和数字两部分&#xff0c;测试时间各为17分钟&#xff0c;测试正式开始后不能中断或暂停

ECMAScript 1(ES1):JavaScript 的开端

1. 版本背景与发布 ●发布时间&#xff1a;1997 年 6 月&#xff0c;由 ECMA International 正式发布&#xff0c;标准编号为 ECMA-262。 ●历史意义&#xff1a;ES1 是 JavaScript 的首个标准化版本&#xff0c;结束了 Netscape Navigator 与 Internet Explorer 浏览器间脚本语…

C语言面试高频题——define 和typedef 的区别?

1. 基本概念 (1) #define 定义&#xff1a;#define 是预处理指令&#xff0c;用于定义宏。作用&#xff1a;在编译之前进行文本替换。语法&#xff1a;#define 宏名 替换内容示例&#xff1a;#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义&#xff1a;…

【自然语言处理与大模型】模型压缩技术之蒸馏

知识蒸馏是一种模型压缩技术&#xff0c;主要用于将大型模型&#xff08;教师模型&#xff09;的知识转移到更小的模型&#xff08;学生模型&#xff09;中。在大语言模型领域&#xff0c;这一技术特别重要。 知识蒸馏的核心思想是利用教师模型的输出作为软标签&#xff08;sof…

PHP CURL发送POST请求(支持HEADER参数配置)

/** POST请求(raw数据请求,支持HEADER参数配置) * @param $url * @param $datas 支持数组或字符串 * # $CURLOPT_HTTPHEADER = [ X-AjaxPro-Method:ShowList, Content-Type: application/json; charset=utf-8, Content-Length: . strlen($data_string)]; …

利用JMeter代理服务器方式实现高效压测

前言 在当今快节奏的互联网时代&#xff0c;确保Web应用和服务能够在高负载下稳定运行变得至关重要。无论是电子商务平台、社交媒体网络还是在线教育服务&#xff0c;用户对网站响应速度和稳定性的期望从未如此之高。因此&#xff0c;性能测试不再是一个可选项&#xff0c;而是…

【JavaWeb后端开发04】java操作数据库(JDBC + Mybatis+ yml格式)详解

文章目录 1. 前言2. JDBC2.1 介绍2.2 入门程序2.2.1 DataGrip2.2.2 在IDEA执行sql语句 2.3 查询数据案例2.3.1 需求2.3.2 准备工作2.3.3 AI代码实现2.3.4 代码剖析2.3.4.1 ResultSet2.3.4.2 预编译SQL2.3.4.2.1 SQL注入2.3.4.2.2 SQL注入解决2.3.4.2.3 性能更高 2.4 增删改数据…

力扣-240.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, in…

Spark-Streaming(三)

一. kafka和flume的整合 任务需求一:利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台 1. 在flume/conf/目录下添加flume-kafka.conf文件 配置文件如下 2. 启动flume和kafka消费者 3. 传入数据 查看fl…

Spring Boot 启动生命周期详解

Spring Boot 启动生命周期详解 1. 启动阶段划分 Spring Boot 启动过程分为 4个核心阶段&#xff0c;每个阶段涉及不同的核心类和执行逻辑&#xff1a; 阶段 1&#xff1a;预初始化&#xff08;Pre-initialization&#xff09; 目标&#xff1a;准备启动器和环境配置关键类&am…

《深入理解 AOP》

一、AOP 是什么 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;是软件开发中一种重要的编程范式。它通过横向抽取机制&#xff0c;将那些与业务逻辑本身无关、却为业务模块所共同调用的逻辑或责任&#xff08;如事务处理、日…

Python【协程(Coroutine)和线程的关系】

协程(Coroutine)和线程都是实现并发编程的技术&#xff0c;但它们在实现方式、使用场景和性能上有显著区别。理解它们的关系与差异有助于在实际应用中选择合适的并发模型&#xff0c;以下是它们的核心关系与对比分析&#xff1a; 一、核心关系 互补关系 协程和线程可以结合使用…

Springboot——Redis的使用

在当今的软件开发领域&#xff0c;缓存技术是提升应用性能的关键手段之一。Redis 作为一款高性能的键值对存储数据库&#xff0c;凭借其出色的读写速度和丰富的数据结构&#xff0c;在缓存场景中得到了广泛应用。Spring Boot 作为一款简化 Spring 应用开发的框架&#xff0c;与…

BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment

背景 该论文是在BEVDet的基础上进行了一个调整优化&#xff0c;传统的方法是将特征图与深度预测进行外积得到视椎特征图&#xff0c;再将它与预处理好的体素索引结合&#xff0c;将每个视椎特征分类到每个voxel中进行累加和的操作。BEVFusion与BEVDepth等方法是避免了累加和&a…

蓝桥杯常考的找规律题

目录 灵感来源&#xff1a; B站视频链接&#xff1a; 找规律题具有什么样的特点&#xff1a; 报数游戏&#xff08;Java组&#xff09;&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路详解&#xff1a; 代码详解&#xff1a; 阶乘求和&#xff08;Java组…

使用ffmpeg 将图片合成为视频,填充模糊背景,并添加两段音乐

1.输入3张图片,每张播放一次,播放两秒,视频分辨率设置为1920:1080,每张图片前0.3秒淡入,后0.3秒淡出,图片宽高比不变,用白色填充空白区域 ffmpeg -loop 1 -t 2 -i "img1.jpg" \-loop 1 -t 2 -i "img2.jpg" \-loop 1 -t 2 -i "img3.jpg" \-filte…

PostgreSQL技术内幕29:事件触发器tag原理解析

文章目录 0.简介1.概念说明2.tag的生成和存储2.1 tag合法性校验2.2 内存中存储2.3 持久化存储 3.tag的触发 0.简介 在上一篇文章中中&#xff0c;我们介绍了PG中的两种触发器&#xff0c;即适合于DML的普通触发器和对于DDL的事件触发器&#xff0c;其中事件触发器与常规的 DML…