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实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

EMP.DLL是什么东西?游戏提示EMP.DLL文件缺失怎么解决

emp.dll文件是Windows操作系统中的一种动态链接库文件&#xff0c;它被设计为可以被多个程序共享使用的模块化文件。这种设计旨在提高系统效率&#xff0c;减少内存消耗&#xff0c;并简化软件的维护和更新。DLL文件通常包含了一系列相关的函数和变量&#xff0c;这些函数和变量…

全景剖析阿里云容器网络数据链路(七):Terway DataPath V2(Terway≥1.8.0)

作者&#xff1a;余凯 前言 近几年&#xff0c;企业基础设施云原生化的趋势越来越强烈&#xff0c;从最开始的IaaS化到现在的微服务化&#xff0c;客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度&#xff0c;也一直在高速的发展和演…

qt学习篇---界面按键关联(信号和槽)

目录 1.qt基础 2.做一个界面 创建project UI界面设计 信号和槽 1.控件改名字 2.什么是信号和槽 3.怎么关联信号和槽 自动关联 手动关联 1.qt基础 qt可移植性强&#xff0c;不久会用到MCU。很有意义学习 2.做一个界面 创建project 不要中文路径 选择QWidget .pro文件…

ASP.NET实验室预约系统的设计

摘 要 实验室预约系统的设计主要是基于B/S模型&#xff0c;在Windows系统下&#xff0c;运用ASP.NET平台和SQLServer2000数据库实现实验室预约功能。该设计主要实现了实验室的预约和管理功能。预约功能包括老师对实验室信息、实验项目和实验预约情况的查询以及对实验室的预约…

LeetCode 69—— x 的平方根

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 二分查找法&#xff0c;对于整数 i ∈ [ 0 , x ] i \in [0,x] i∈[0,x]&#xff0c;我们判断 i 2 i^2 i2 和 x x x 的关系&#xff0c;然后找到最后一个平方小于等于 x x x …

向量语义学

书籍&#xff1a;Vector Semantics 作者&#xff1a;Andrs Kornai 出版&#xff1a;Springer Singapore 书籍下载-《向量语义学》本书通过提出一个以线性多面体术语表达的形式理论来弥合这一差距&#xff0c;该理论将字向量和概念结构进行了概括&#xff0c;将每个词典定义视…

45. UE5 RPG 使用元属性(Meta Attributes)以及使用Set by Caller修改伤害

在RPG游戏中&#xff0c;我们是不会直接修改生命值的属性&#xff0c;是因为在修改角色属性时&#xff0c;需要获取角色的属性并进行复杂的计算&#xff0c;所以&#xff0c;我们正常情况下使用元属性&#xff08;Meta Attributes&#xff09;作为计算的中间的媒。在服务器上先…

前端-React项目初始化

大家好我是苏麟 , 今天聊聊前端依赖 Ant Desgin Pro 快速初始化项目 . Ant Desgin Pro 官网 : 开始使用 - Ant Design Pro 初始化项目 找到文档->快速上手 脚手架命令 : # 使用 npm npm i ant-design/pro-cli -g创建项目命令 : pro create 项目名称 选择简单还是全量 : …

Python | Leetcode Python题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution:def minPathSum(self, grid: List[List[int]]) -> int:if not grid or not grid[0]:return 0rows, columns len(grid), len(grid[0])dp [[0] * columns for _ in range(rows)]dp[0][0] grid[0][0]for i in range(1, r…

五大开放式耳机推荐,选对耳机让运动更带感!

看似精彩的户外运动经历背后&#xff0c;其实是枯燥的体能运动和训练&#xff0c;以及独自长途和长时间旅行伴随的孤独感&#xff0c;而排解这些不良情绪的最佳方式就是音乐。如果你希望在运动、舒适、安全和音质之间获得一个最佳平衡&#xff0c;那相比入耳式耳机&#xff0c;…

71.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-分析并利用角色与怪物创建的数据包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

『项目整理』易CAR通项目说明文档-我的第一款APP

『项目整理』易CAR通项目说明文档-我的第一款APP 项目介绍功能介绍技术栈介绍实现效果如何运行备注 项目介绍 易CAR通项目是我的第一个Android项目。是一款结合了AR技术的模仿懂车帝的看车软件。因为是初学&#xff0c;所示实现的效果差强人意&#xff0c;很多的功能界面只实现…

文件批量高效管理,批量将PDF类型文件移动到指定文件夹里,实现文件高效管理

文件的管理与整理成为了我们生活中不可或缺的一部分。面对堆积如山的PDF文件&#xff0c;你是否也曾感到手足无措、焦头烂额&#xff1f;现在&#xff0c;有了我们的批量文件管理工具&#xff0c;PDF文件的管理将变得前所未有的高效与简单&#xff01; 首先&#xff0c;我们要…

对于Servlet项目无法显示css样式

有可能你在过滤器中拦截了.css文件&#xff0c;并且你设置了响应格式导致的&#xff0c;就比如我的项目如下图所示 删除servletResponse.setContentType("text/html; charsetUTF-8");即可

Android C++ 开发调试 LLDB 工具的使用

文章目录 调试环境准备基础命令Breakpoint CommandsWatchpoint CommandsExamining VariablesEvaluating ExpressionsExamining Thread StateExecutable and Shared Library Query Commands 参考&#xff1a; Android 中在进行 NDK 开发的时候&#xff0c;我们经常需要进行 C 代…

MySQL——88张表汇总——DDL+外键

外键er图 88张表 /* Navicat MySQL Data TransferSource Server : MyList Source Server Version : 50726 Source Host : localhost:3309 Source Database : schooldbTarget Server Type : MYSQL Target Server Version : 50726 File Encoding …

【C/C++基础实战】:用C++实现通讯录管理系统——含完整源码

文章目录 通讯录管理系统一、系统需求以及成品演示二、代码实现三、完整代码 通讯录管理系统 一、系统需求以及成品演示 1.1 系统需求 通讯录是一个可以记录亲人、好友信息的工具。这里利用C来实现一个通讯录管理系统 系统中需要实现的功能如下&#xff1a; 添加联系人&am…

《HCIP-openEuler实验指导手册》2.1安装和测试Nginx

知识点 Nginx (发音为 “engine x”) 是一个开源的高性能 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。由 Igor Sysoev 创建并维护&#xff0c;其设计用于处理高并发连接&#xff0c;具有高度的可扩展性和灵活性。 安装步骤 yum方式安装 dn…

Kubernetes - Dashboard 配置用户名密码方式登录

Kubernetes - Dashboard 配置用户名密码方式登录 前言&#xff1a; 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding绑定即…