ToB企服应用市场:ToB评测及商务社交产业平台

标题: git提交错了?别慌,直接删除提交记录 [打印本页]

作者: 去皮卡多    时间: 2024-7-15 07:51
标题: git提交错了?别慌,直接删除提交记录

为什么要删除提交历史


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


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


我们的远程仓库各人都能看见的


这要是被其他人发现就惨了!当务之急,我必须立刻马上删除这一条提交记录!!
于是,我打开百度,搜索到两个救命关键词:git revertgit reset!这两个命令都有打消操纵的功能!
使用git revert打消提交

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

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

打消单个提交:
  1. git revert <commit-hash>
复制代码
这会创建一个新的提交,用于打消指定的提交  的更改。
打消多个提交:
  1. git revert <commit-hash1> <commit-hash2> ...
复制代码
这会为每个指定的提交创建一个新的打消提交。
打消近来的提交:
  1. git revert HEAD
复制代码
打消某个范围内的提交:
  1. git revert <commit-hash1>^..<commit-hash2>
复制代码
这会打消从 (不包罗)到 (包罗)范围内的全部提交。
打消提交时,Git 会打开一个文本编辑器,让你输入打消提交的信息。你可以修改默认的提交信息,然后保存并关闭编辑器。
打消实操

不管3721,我们先试着用它打消下提交试试。
先试用git log(其他可视化面板也行)找到要打消的commit哈希码
  1. b1b56b50a0859556623283946972e495d4a42fc1
复制代码


然后,执行单个文件打消命令
  1. git revert b1b56b50a0859556623283946972e495d4a42fc1
复制代码
执行命令后,控制台会出现vim编辑器,让我们为本次更改提交阐明


   vim编辑器小技巧
  
  我们点击i输入提交阐明【删除错误提交】,然后点击ESC退出编辑模式,末了输入:wq保存并退出。
退出vim编辑器后,直接输入git push推送代码!
我们来看看结果:
代码里前次提交的内容确实没了!
第一次错误提交时的代码内容


revert后的代码内容


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


这下我算明白了git revert的作用了:用于打消一个或多个提交的命令,但是会保存历史记录
这显然不是我的意图,我想做的是删除git提交历史!删除!不保存任何痕迹呢种!只能试试git reset了!
使用git reset打消提交

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

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

打消提交,保存修改
  1. git reset --soft HEAD~1
复制代码
这会将 HEAD 指向的分支的最新提交打消掉,并保存全部更改在工作目录中。如许你就可以重新提交,并修改提交信息。
打消提交,取消暂存的文件
  1. git reset HEAD~1
复制代码
这会将 HEAD 指向的分支的最新提交打消掉,并将暂存区的文件取消暂存,但保存在工作目录中。如许你可以重新选择要暂存的文件。
打消提交,扬弃修改
  1. git reset --hard HEAD~1
复制代码
这会将 HEAD 指向的分支的最新提交打消掉,并扬弃全部更改,包罗暂存区和工作目录中的文件。如许你就可以完全回到上一个提交的状态。
将 HEAD 指针移动到指定的提交
  1. git reset --hard <commit-hash>
复制代码
这会将 HEAD 指针移动到指定的提交,并扬弃全部更改。这可以用来回滚到历史提交状态
打消实操

由于当地没有其他修改,暂存区也没有文件,因此,使用
  1. git reset HEAD~1
复制代码
但是,我们刚才的误操纵,导致有两条不应该出现的操纵记录


所以,我们HEAD指针应该向下移动2个
  1. git reset HEAD~2
复制代码
命令行输入后,我们就会发现当地代码已经恢复到没有提交这两个记录前的状态了!
但云端的记录还在


那如何删除云端的记录呢?很简朴,将当地仓库的代码强推到远端仓库覆盖掉就行!(当地仓库已经是未提交两个错误信息时的状态了)
末了,我们使用下面的命令将当地代码强行覆盖云端
  1. git push --force
复制代码
执行完后,就是见证古迹的时候


再看看git上


也没有,nice!!
重要提示

使用 --force 选项将覆盖远程仓库的提交历史,这意味着远程仓库的历史将会变为你当地仓库的历史。这好坏常伤害的操纵!!一定要确保当地代码和远程代码是相关的!!一定要谨慎操纵!!
注git push --force是下面命令的简写
  1. git push origin <branch-name> --force
复制代码
  git push origin  --force 命令用于将当地分支推送到远程仓库,而且使用 --force 选项欺压覆盖远程仓库中的提交历史。
  
  总结

git reset 用于移动分支的指针,可以修改提交历史,但不会创建新的提交;而 git revert 用于打消先前的提交,并创建一个新的提交来保持提交历史的完整性。
通过本实例,你一定学会了使用git reset 加 git push --force的方法删除远程仓库的错误提交历史!如果有劳绩,记得收藏点赞哈~
末了说一句(求关注!别白嫖!)
如果这篇文章对您有所资助,大概有所开导的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中复兴:笔记  就可以得到蜗牛为你精心准备的java实战语雀笔记,复兴口试、开辟手册、有超赞的粉丝福利!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4