git提交错了?别慌,直接删除提交记录

2024-05-02 18:28

本文主要是介绍git提交错了?别慌,直接删除提交记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


为什么要删除提交历史

前几天产品提了个很扯淡的需求,我在代码了进行了吐槽....

图片

要命的是我不下心进行了代码提交:

图片

我们的远程仓库大家都能看见的

图片

这要是被其他人发现就惨了!当务之急,我必须立刻马上删除这一条提交记录!!

于是,我打开百度,搜索到两个救命关键词:git revertgit reset!这两个命令都有撤销操作的功能!

使用git revert撤销提交

revert的英文释义是回复、恢复(到原来的状态)

作用

git revert 是 Git 中用于撤销一个或多个提交的命令,但是会保留历史记录。它创建一个新的提交,该提交是对原提交的相反操作,以撤销原提交的更改。通过 git revert 撤销提交,可以保持历史记录的完整性,不会修改已经共享的提交历史。

语法

撤销单个提交:

git revert <commit-hash>

这会创建一个新的提交,用于撤销指定的提交  的更改。

撤销多个提交:

git revert <commit-hash1> <commit-hash2> ...

这会为每个指定的提交创建一个新的撤销提交。

撤销最近的提交:

git revert HEAD

撤销某个范围内的提交:

git revert <commit-hash1>^..<commit-hash2>

这会撤销从 (不包括)到 (包括)范围内的所有提交。

撤销提交时,Git 会打开一个文本编辑器,让你输入撤销提交的信息。你可以修改默认的提交信息,然后保存并关闭编辑器。

撤销实操

不管3721,我们先试着用它撤销下提交试试。

先试用git log(其他可视化面板也行)找到要撤销的commit哈希码

b1b56b50a0859556623283946972e495d4a42fc1

图片

然后,执行单个文件撤销命令

git revert b1b56b50a0859556623283946972e495d4a42fc1

执行命令后,控制台会出现vim编辑器,让我们为本次更改提交说明

图片

vim编辑器小技巧

  • 进入编辑模式:进入编辑模式的方式取决于当前编辑器的模式。通常情况下,按下 i 键可以进入插入模式,允许你编辑文本。

  • 编辑文本:在插入模式下,你可以编辑文本。使用方向键或者 h, j, k, l 键移动光标。

  • 退出编辑模式:编辑完成后,按下 Esc 键退出插入模式。

  • 保存并退出:在退出编辑模式后,输入 :wq 并按下 Enter 键,可以保存并退出编辑器。

  • 放弃更改并退出:在退出编辑模式后,输入 :q! 并按下 Enter 键,可以放弃更改并退出编辑器。

我们点击i输入提交说明【删除错误提交】,然后点击ESC退出编辑模式,最后输入:wq保存并退出。

退出vim编辑器后,直接输入git push推送代码!

我们来看看效果:

代码里上次提交的内容确实没了!

第一次错误提交时的代码内容

图片

revert后的代码内容

图片

但是,git的推送历史上有啊!!

图片

这下我算明白了git revert的作用了:用于撤销一个或多个提交的命令,但是会保留历史记录

这显然不是我的意图,我想做的是删除git提交历史!删除!不保留任何痕迹呢种!只能试试git reset了!

使用git reset撤销提交

凭借我初中毕业的水平,我一眼就明白了reset的含义:重置!现在,我们先看看git reset的作用。

作用

git reset 用于移动 HEAD 指针并可选地更改暂存区和工作目录的状态。它是一个非常强大的工具,常用于撤销提交、取消暂存文件、修改提交内容等操作。

语法

撤销提交,保留修改

git reset --soft HEAD~1

这会将 HEAD 指向的分支的最新提交撤销掉,并保留所有更改在工作目录中。这样你就可以重新提交,并修改提交信息。

撤销提交,取消暂存的文件

git reset HEAD~1

这会将 HEAD 指向的分支的最新提交撤销掉,并将暂存区的文件取消暂存,但保留在工作目录中。这样你可以重新选择要暂存的文件。

撤销提交,丢弃修改

git reset --hard HEAD~1

这会将 HEAD 指向的分支的最新提交撤销掉,并丢弃所有更改,包括暂存区和工作目录中的文件。这样你就可以完全回到上一个提交的状态。

将 HEAD 指针移动到指定的提交

git reset --hard <commit-hash>

这会将 HEAD 指针移动到指定的提交,并丢弃所有更改。这可以用来回滚到历史提交状态

撤销实操

由于本地没有其他修改,暂存区也没有文件,因此,使用

git reset HEAD~1

但是,我们刚才的误操作,导致有两条不应该出现的操作记录

图片

所以,我们HEAD指针应该向下移动2个

git reset HEAD~2

命令行输入后,我们就会发现本地代码已经恢复到没有提交这两个记录前的状态了!

但云端的记录还在

图片

那如何删除云端的记录呢?很简单,将本地仓库的代码强推到远端仓库覆盖掉就行!(本地仓库已经是未提交两个错误信息时的状态了)

最后,我们使用下面的命令将本地代码强行覆盖云端

git push --force

执行完后,就是见证奇迹的时刻

图片

再看看git上

图片

也没有,nice!!

重要提示

使用 --force 选项将覆盖远程仓库的提交历史,这意味着远程仓库的历史将会变为你本地仓库的历史。这是非常危险的操作!!一定要确保本地代码和远程代码是相关的!!一定要谨慎操作!!

注git push --force是下面命令的简写

git push origin <branch-name> --force

git push origin  --force 命令用于将本地分支推送到远程仓库,并且使用 --force 选项强制覆盖远程仓库中的提交历史。

  • git push: 将本地分支的提交推送到远程仓库。

  • origin: 指定远程仓库的别名。通常指向你克隆或者添加远程仓库时所使用的 URL。

  • : 要推送的本地分支的名称。

  • --force (或 -f): 强制推送选项。这会覆盖远程仓库的提交历史,即使本地分支的提交历史不是远程分支的子集也会强制推送。

总结

git reset 用于移动分支的指针,可以修改提交历史,但不会创建新的提交;而 git revert 用于撤销先前的提交,并创建一个新的提交来保持提交历史的完整性。

通过本实例,你一定学会了使用git reset 加 git push --force的方法删除远程仓库的错误提交历史!如果有收获,记得收藏点赞哈~

最后说一句(求关注!别白嫖!)

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

这篇关于git提交错了?别慌,直接删除提交记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954891

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元