Git恢复之前版本的两种方法reset、revert区别

在多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。

使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支

本篇文章git版本是:

css 复制代码
$ git --version 
git version 2.10.2.windows.1 

方法一:git reset

原理:

git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:

适用场景:

如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法

具体实践

我的例子是3个文件test01.txt ,test02.txt ,test03.txt,都说新增txt分别对应第一次,第二次,第三次提交。

我们先使用git log -3命令来查看日志(-3代码查看最近3条记录):

总共3次提交,假如我要恢复到第二次提交,那么如下命令:

git reset --hard 621f4006ccad957945b8deba17c6d72131f67443

HEAD is now at 621f400 说明HEAD现在已经指向第二次提交了

再用"git log"查看版本信息,此时本地的HEAD已经指向之前的版本

第三次提交的日志已经没有了。然后使用git push -f提交更改: 此时如果用git push会报错,因为我们本地库HEAD指向的版本比远程库的要旧

此时已经没有test03.txt了,说明reset把第二次提交之后的提交全部清除了。

方法二:git revert

原理

git revert是用于"反做"某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示

适用场景

如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法

具体实践

还是上面的例子,现在是3个文件

还是反做第二次提交,先git revert -n commit_id一下【注意:使用-n是应为revert后,需要重新提交一个commit信息,然后在推送。如果不使用-n,指令后会弹出编辑器用于编辑提交信息(commit信息 git commit -m '编辑的是这里的信息'),编辑完之后不需要 执行git commit命令了】

git revert -n 82ca415620e1f797ff0389a7dc591d456808f1b2

再通过git status查看发现 有需要提交的

最后git commit提交

我们再查看日志情况:

发现新出现了一次提交记录,并且第三次提交的内容没有被清空,

这个时候我们再git push一下

发现test02.txt已经没有了,但是第三次提交的test03.txt还是在的

总结:

reset:回滚到某个commit,此commit之后的所有commit都会一同跟着消失回退。

revert:将某一个commit反做,此commit内容会被撤销,并生成一个全新的commit,此commit保留了撤销的commit之前之后的其他commit。

参考:blog.csdn.net/weixin\_441...

相关推荐
游九尘20 分钟前
git只忽略自己本地的文件,其他人的文件正常提交
git
SiYuanFeng1 小时前
新手学Git:以一个小游戏项目为例,完成初始化、提交、查看历史与恢复版本
大数据·git·elasticsearch
rayyy92 小时前
Git 忽略已提交过的文件夹 完整步骤
git
YoseZang2 小时前
【手工】git的使用 - 密钥生成和多账户使用(config文件)
git
韭菜钟2 小时前
Git 代理与内网 Gitea 共存方案(无需 no_proxy)
git·gitea
zhougl9964 小时前
Git 命令速查手册
大数据·git·elasticsearch
小陈同学呦5 小时前
Git Worktree 并行开发实战指南
git·vibecoding
码农小旋风5 小时前
2026 最新 Claude Code Windows 安装教程:Node、Git Bash、命令检查一步步配好
windows·git·bash·claude
ethan.Yin5 小时前
Git_查看已删除文件的历史
git
KieranYin20 小时前
Git_查看已删除文件的历史
git