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

相关推荐
周星星_少年只有一个面6 分钟前
git入门环境搭建
git
五味香12 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
aPurpleBerry1 小时前
【问题解决】Github上手动Delete file之后, git remote add+git push出错
git·github
M_emory_3 小时前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Make_magic3 小时前
Git学习教程(更新中)
大数据·人工智能·git·elasticsearch·计算机视觉
不穿铠甲的穿山甲3 小时前
git-.git目录解析
git
唔知小罗13 小时前
git config是做什么的?
git
不是鱼18 小时前
新人程序猿必备的git技能(超实用基础版)
git·github
Exclusive_Cat21 小时前
Git的使用(基础语句)
git
江上清风山间明月21 小时前
git撤销、回退某个commit的修改
git·commit·版本·撤销·回退·特定