社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

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

Java基基 • 4 周前 • 38 次点击  

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入芋道快速开发平台知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7355692365330792488


为什么要删除提交历史

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

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

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

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

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

使用git revert撤销提交

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

作用

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

语法

撤销单个提交:

git revert 

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

撤销多个提交:

git revert   ...

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

撤销最近的提交:

git revert HEAD

撤销某个范围内的提交:

git revert ^..

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

撤销提交时,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了!

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

使用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 

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

撤销实操

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

git reset HEAD~1

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

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

git reset HEAD~2

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

但云端的记录还在

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

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

git push --force

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

再看看git上

也没有,nice!!

重要提示

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

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

git push origin  --force

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

  • git push: 将本地分支的提交推送到远程仓库。
  • origin: 指定远程仓库的别名。通常指向你克隆或者添加远程仓库时所使用的 URL。
  • : 要推送的本地分支的名称。
  • --force (或 -f): 强制推送选项。这会覆盖远程仓库的提交历史,即使本地分支的提交历史不是远程分支的子集也会强制推送。

总结

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

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


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179682
 
38 次点击