Git版本回退
转自:https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192
https://vue3js.cn/interview/git/git%20reset_%20git%20revert.html#一、是什么
1.reset命令
reset
用于回退版本,可以遗弃不再使用的提交。
1.1--hard参数
使用命令
git reset --hard HEAD^ //或者 git reset --hard HEAD~1
表示回退到上1个版本,HEAD~n表示回退到上n个版本, 回退的本质是移动HEAD指针,git reset 命令是在更改git指针HEAD的指向,具体是更改指向不同的版本号。然后顺便把工作区的文件更新了。
类似的:
如果想恢复了,直接再reset之前的commitID前几位即可,
myproj % git reset --hard 7ce989d2294 HEAD 现在位于 7ce989d 修改a.txt,+0820 bg修改一下
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
logs/有记录所有的命令情况,可以找回:
myproj % git reflog 7ce989d (HEAD -> master) HEAD@{0}: reset: moving to 7ce989d2294 c3a96ee HEAD@{1}: reset: moving to head~1 7ce989d (HEAD -> master) HEAD@{2}: checkout: moving from feature/1 to master 594e046 (origin/master, feature/1) HEAD@{3}: checkout: moving from master to feature/1 7ce989d (HEAD -> master) HEAD@{4}: commit: 修改a.txt,+0820 bg修改一下
1.2--soft参数
https://www.runoob.com/git/git-reset.html
--soft 参数用于回退到某个版本:
$ git reset --soft HEAD~3 # 回退上上上一个版本
暂存区和工作区内容都不变,只是版本库的版本回滚了,
该参数能让commit的内容,再回到工作区,不会丢失
1.3--mixed参数(默认)
https://zhuanlan.zhihu.com/p/346993796
--mixed 为默认,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
git reset #
没有指定ID, 暂存区的内容会被当前ID版本号的内容覆盖,工作区不变
git reset <ID> #
指定ID,暂存区的内容会被指定ID版本号的内容覆盖,工作区不变
应该是只影响暂存区的内容,使得暂存区和版本库一致。如下图所示,本底仓就是版本库,
git reset HEAD可以理解为current 版本,舍去暂存区的内容,重新将文件变为unstaged。
1.4总结
-
--mixed(默认):默认的时候,只有暂存区变化
-
--hard参数:如果使用 --hard 参数,那么工作区也会变化
-
--soft:如果使用 --soft 参数,那么暂存区和工作区都不会变化
2.revert命令
在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化,不会改变过去的历史,主要是用于安全地取消过去发布的提交。
git revert
撤销某次操作,此次操作之前和之后的 commit
和history
都会保留,并且把这次撤销,作为一次最新的提交,如下:
git revert <commit_id>
git revert HEAD #撤销前一个版本
git revert HEAD^ #撤销前前一次
3.区别
- 撤销(revert)被设计为撤销公开的提交(比如已经push)的安全方式。用一次新的commit来回滚之前的commit。
git reset
被设计为重设本地更改。直接删除指定的commit。- git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。reset 是把HEAD向后移动了一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2018-08-20 PAT 1103 Integer Factorization[难]
2018-08-20 PAT 1101 Quick Sort[一般上]
2018-08-20 Andrew Ng-ML-第十八章-大规模机器学习
2018-08-20 PAT 1070 Mooncake[一般]
2018-08-20 PAT 1054 The Dominant Color[简单][运行超时的问题]