本文主要介绍了恢复Git上一版本的两种方法,reset和revert(图文详解),通过图文并茂的例子进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。下面让我们跟随边肖一起学习。
一、问题描述
在使用github实现多人协作程序开发的过程中,我们有时会出现提交错误。此时,我们希望取消提交操作,将程序恢复到原始状态。本文总结了两种解决方案:复位和反转。
二、背景知识
git的版本管理,及HEAD的理解
每次git的提交,Git都会自动把它们串成一个时间轴,这个时间轴就是一个分支。如果没有新的分支,那么就只有一个时间轴,也就是只有一个分支。在Git中,这个分支叫做主分支,也就是master分支。有一个HEAD指针指向当前分支(如果只有一个分支,那么它将指向master,而master指向最新提交的)。每个版本都有自己的版本信息,例如唯一的版本号、版本名等。如下所示,假设只有一个分支:
三、解决方法
方法一:git reset
原理:git reset的作用是修改HEAD的位置,也就是把HEAD指向的位置改成之前存在的版本,如下图所示。假设我们回到第一个版本:
适用场景:如果您想要恢复到以前提交的版本,并且我们不希望在该版本之后提交任何版本,您可以使用此方法。
具体操作:
1. 查看版本号:
您可以使用命令“git log”来查看:
也可以在github网站上查看:
2. 使用“git reset --hard 目标版本号”命令将版本回退:
再次用“git log”检查版本信息。这时,当地负责人已经指着先前的版本:
3. 使用“git push -f”提交更改:
如果此时使用“git push”,将会报告一个错误,因为我们的本地库头指向的版本比远程库的版本旧:
所以我们要用“git push -f”强行推上去,就是这样:
看着github的图形界面,远程库的负责人也已经指向了目标版本:
回滚成功!
方法二:git revert
原理:git revert用于“逆转”某个版本,以便撤销对该版本的修改。例如,我们提交了三个版本(版本1、版本2和版本3),突然发现版本2无法工作(例如,有一个bug)。如果我们想取消版本2,但又不想影响被取消的版本3的提交,我们可以使用git revert命令来反转版本2,生成一个新的版本4,它会保留版本3的东西,但取消版本2的东西。如下图所示:
适用场景:如果我们想要取消一个之前的版本,但是想要保留目标版本之后的版本,并且记录整个版本变更过程,可以使用这个方法。
具体操作:
比如现在库中有三个文件:READ.md,text.txt,text2.txt。
1.检查版本号:
可以通过命令行查看(输入git log):
如图,最新的两个版本分别叫做“add text.txt”(即新文件text.txt)和“add text2.txt”(新文件text2.txt)。这时候我们就不需要text.txt文件了,也就是说不要“添加text.txt”版本的操作了,可以通过反转“添加text.txt”的版本来实现。
也可以通过github网站的图形界面查看版本号:
2.用“git revert -n版本号”反转,用“git commit -m版本名”提交:
(1)相反,使用“git revert -n version number”命令。命令如下,我们反转版本号为8b89621的版本:
git revert-n 8b 89621019 c 9 ADC 6 fc 4d 242 CD 41 daeb 13 aeb 9861
注意:这里可能有冲突,所以需要手动修改冲突的文件。并要求git添加文件名。
(2)提交,使用“git commit -m版本名”,如:
git commit -m 'revert add text.txt '
此时可以使用“git log”查看本地版本信息,显示生成了新版本,使“add text.txt”版本改为了“add text2.txt”版本,但保留了“add text 2 . txt”版本:
3.使用“git push”推送远程库:
git推送
检查github上显示的远程库版本信息:
这时候检查一下仓库里的文件,还剩两个:READ.md和text2.txt
要成功!
关于Git恢复前的复位和还原两种方法的文章到此为止。请搜索我们以前的文章或继续浏览下面的相关文章,以获得更多关于恢复Git之前版本的信息。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。