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

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

git revert 和git 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的Cherry pick
  • shell中的流程控制
  • numpy用savez_compressed压缩数据
  • 比较日志性能:Glog、Spdlog 和 ofstream 在不同硬件上的表现(推荐Spdlog)
  • 新服务器常见设置
  • 【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数
  • 移植案例与原理 - HDF驱动框架-驱动配置(2)
  • Linux常用操作大全(下)
  • Google 广告VS Facebook广告:哪个更适合我?2024全维度区别详解
  • 中国500米分辨率年平均LAI数据集(2000-2020)
  • PLC模拟量和数字量到底有什么区别?
  • 【Liunx】基础开发工具的使用介绍-- yum / vim / gcc / gdb / make
  • Vue CLI,Vue Router,Vuex
  • 浅谈疫情后IT业的挑战和机会
  • 【Linux系统编程】快速查找errno错误码信息
  • Brief introduction of how to 'Call, Apply and Bind'
  • ECMAScript入门(七)--Module语法
  • ES6语法详解(一)
  • Go 语言编译器的 //go: 详解
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • PermissionScope Swift4 兼容问题
  • PHP变量
  • sublime配置文件
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue数据传递--我有特殊的实现技巧
  • vue学习系列(二)vue-cli
  • 阿里研究院入选中国企业智库系统影响力榜
  • 初识MongoDB分片
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记录:CentOS7.2配置LNMP环境记录
  • 今年的LC3大会没了?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 1.Ext JS 建立web开发工程
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Java并发新构件之Exchanger
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (16)Reactor的测试——响应式Spring的道法术器
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (转载)从 Java 代码到 Java 堆
  • **python多态
  • .Net Core和.Net Standard直观理解
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net 路由处理厉害了
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @AliasFor注解