Git恢复之前版本的两种方法reset、revert(图文详解)
一、问题描述
在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。
二、背景知识
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”查看版本信息,此时本地的HEAD已经指向之前的版本:
3. 使用“git push -f”提交更改:
此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧:
所以我们要用“git push -f”强制推上去,就可以了:
在github图形化界面上看,远程库的HEAD也已经指向目标版本:
回退成功!
方法二:git revert
原理: git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。如下图所示,假设我们要回退到版本一,版本四的内容和版本一是一样的:
适用场景:如果我们想恢复之前的某一版本(该版本不是merge类型),但是又不想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
具体操作:
1. 查看版本号:
可以通过命令行查看:
也可以通过github网站图形化界面查看:
2.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交:
(1)反做,使用“git revert -n 版本号”:
(2)提交,使用“git commit -m 版本名”:
此时可以用“git log”查看本地的版本信息,可见多生成了一个新的版本:
3.使用“git push”推上远程库:
查看github上显示的远程库版本信息:
反做成功!
---------------------
作者:yxlshk
来源:CSDN
原文:https://blog.csdn.net/yxlshk/article/details/79944535
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- 【原创】JEECMS v6~v7任意文件上传漏洞(2)
- GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)
- php Hash Table(二) Hash函数
- HDU-2571命运
- 离职了,在家温故而知新----1 设计模式 &; 开头
- http://codeforces.com/contest/845
- Windows下如何创建低权限进程
- sqlserver 重置标识列
- cocos2d-x-3.x 学习总结(一)
- python2.7入门---内置函数
- Android 高逼格纯代码实现类似微信钱包带分割线的GridView
- C语言的产生
- call(),apply(),bind()区别?
- 数据分析---《Python for Data Analysis》学习笔记【02】
- Java斗地主案例、异常和自定义异常整理
- 用户和用户组y哦不过y哦那个好
- Java+Selenium自动化对非输入框的日历或日期控件的处理
- openstack,docker,mesos,k8s关系
- C# winfrom容器布局与工具栏&;&;右键菜单栏&;&;隐藏显示小图标的的简单事件
- JAVA中的array是通过线性表还是链表实现的呢?
热门文章
- Hadoop-2.2.0中文文档——Common-Hadoop HTTP web控制台认证
- [翻译] Working with NSURLSession: AFNetworking 2.0
- html 中怎么设置div的位置
- Python、Lua和Ruby比较——脚本语言大P.K.
- OpenCV学习(22) opencv中使用kmeans算法
- go语言基础之切片做函数参数
- 把表单转成json,并且name为key,value为值
- jQuery多媒体播放器插件jQuery Media Plugin使用方法
- Android -- 文件扫描
- Netdata Linux下性能实时监测工具