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...

相关推荐
呆萌的代Ma2 小时前
Git不强行推送,撤销最近几次的提交
git
透明的玻璃杯5 小时前
git应用
git
炸炸鱼.6 小时前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6669 小时前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾10 小时前
Git Worktree
git
程序员小羊!10 小时前
18 GIt
git
怣疯knight10 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG10 小时前
git分支开发管理
git
坤坤藤椒牛肉面11 小时前
GIT的使用
git
w32963627111 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git