git reset 和 git revert_git revert和reset-程序员宅基地

技术标签: git  

一、问题描述


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

二、背景知识

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


三、解决方法

方法一:git reset


原理:

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

 

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

 

具体操作:


1. 查看版本号:
可以使用命令“git log”查看:

2. 使用“git reset --hard 目标版本号”命令将版本回退:

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

 

3. 使用“git push -f”提交更改:
此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧:

 

所以我们要用“git push -f”强制推上去,就可以了:


回退成功!

方法二:git revert

原理:

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

 

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

具体操作:
举个例子,现在库里面有三个文件:READ.md、text.txt、text2.txt。

 

1. 查看版本号:
可以通过命令行查看(输入git log):
如图,最近的两个版本分别叫:“add text.txt”(即新增了文件text.txt)、“add text2.txt”(新增了文件text2.txt)。这个时候我们不需要text.txt这个文件了,那就是说不想要“add text.txt”那个版本的操作,那可以通过反做“add text.txt”这个版本来实现。

 

2.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交:
(1)反做,使用“git revert -n 版本号”命令。如下命令,我们反做版本号为8b89621的版本:

git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861


注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。
(2)提交,使用“git commit -m 版本名”,如:

git commit -m "revert add text.txt" 



此时可以用“git log”查看本地的版本信息,可见多生成了一个新的版本,该版本反做了“add text.txt”版本,但是保留了“add text2.txt”版本:

 

3.使用“git push”推上远程库:

git push



查看github上显示的远程库版本信息:

 

此时查看仓库的文件,剩下两个:READ.md、text2.txt

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36441027/article/details/124032290

智能推荐

SYD8801 ADC使用说明【校准】_ad8801数据校准-程序员宅基地

文章浏览阅读1.4k次。SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.sydtek.com/SYD8801 ADC使用说明先来看看官方说明:..._ad8801数据校准

opencv生成棋盘格-程序员宅基地

文章浏览阅读4.4k次。我们对摄像头进行标定时,常会用到棋盘格_opencv生成棋盘格

短剧分销系统搭建定做-程序员宅基地

文章浏览阅读322次,点赞11次,收藏6次。后期开发:提供系统的后期维护和升级服务,确保系统的持续稳定运行。如果你有相关需求,可以与专业的软件开发公司或团队合作,共同打造符合你要求的短剧分销系统,有没有特别关注的功能或者技术方面的问题呢?我可以帮你进一步探讨~测试与优化:进行充分的测试,包括功能测试、性能测试、安全测试等,并进行优化改进。用户体验:注重用户界面的友好性和易用性,提供便捷的操作流程和良好的用户体验。技术架构:选择适合的技术框架和工具,确保系统的稳定性、安全性和可扩展性。安全保障:加强系统的安全防护,保护用户数据的隐私和安全。

python输出表格size_解决Jupyter NoteBook输出的图表太小看不清问题-程序员宅基地

文章浏览阅读1.3k次。如果使用的是matplotlib绘图,可以通过以下命令更改图片的大小:%matplotlib linline如果是 plt.figure(figsize=(5,3))   #其中(5, 3)用于控制图片的大小如果是 fig,axes = plt.subplots(2 ,3 ,figsize=(12,5))   #其中(12, 5)用于控制图片的大小补充知识:Jupyter Notebook使用pl..._jupyter matplotlib figure size

《百家姓》拼音-2011-程序员宅基地

文章浏览阅读401次。[size=medium]  Zhāo qián sūn lǐ zhōu wú zhèng wáng   赵 钱 孙 李 周 吴 郑 王   féng chén chǔ wèi jiǎng shěn hán yáng   冯 陈 褚 卫 蒋 沈 韩 杨   zhū qín yǒu xǔ hé lǚ shī zhāng   朱 秦 尤 许 何 吕 施 张   kǒng cáo...

Gateway配置全局过滤器GlobalFilter_globalfilter配置放行整个controller-程序员宅基地

文章浏览阅读499次,点赞7次,收藏10次。实例:定义全局过滤器,拦截请求,判断请求的参数是否有authorization且值为admin实现:在gateway服务中定义一个过滤器/*** @author 温柔哥*/// @Order() // 过滤器有很多,根据这个顺序来决定谁先执行谁后执行,值越小越先,默认,也可通过实现Ordered接口来实现@Component // 注入到Spring容器中@Override// 1.获取请求参数// 2.获取参数中的 authorization 参数。_globalfilter配置放行整个controller

随便推点

6种python数据可视化工具,python数据可视化工具包-程序员宅基地

文章浏览阅读993次,点赞10次,收藏23次。直方图是比较常见的视图,它是把横坐标等分成了一定数量的小区间,这个小区间也叫作“箱子”,然后在每个“箱子”内用矩形条(bars)展示该箱子的箱子数(也就是y值),这样就完成了对数据集的直方图分布的可视化。我们创建一个随机的一维数组,然后分别用Matplotlib和Seaborn进行直方图的显示,结果如下,你可以看出,没有任何差别,其中最后一张图就是kde默认为Ture时的显示情况。比如矩阵中的第一张图代表的就是花萼长度自身的分布图,它右侧的这张图代表的是花萼长度与花萼宽度这两个变量之间的关系。

灾害应急管理信息化建设“四步走”——以水旱灾害为例_水旱灾害防洪数据化项目-程序员宅基地

文章浏览阅读1.4k次。引言中国是世界上受自然灾害影响最为严重的国家之一,其中又以水旱灾害的影响最大。由于我国领土面积广大,河湖众多,且地处亚欧大陆和太平洋之间,季风气候盛行,降水时空分布不均,导致了我国的水旱灾害具有种类多、分布广、发生频率高、持续时间长、次生灾害严重、经济损失大、造成人员伤亡多的特点。尤其是今年,是我国自1998年以来汛情最为严重的一年。图1 2020年前三季度洪涝灾害概况近年来国家对于提高灾害风险治理能力十分重视。“十三五”期间,我国进一步加大了防灾减灾科技投入,以防灾减灾业务需求为导向,实施了一大批_水旱灾害防洪数据化项目

Ansible入门篇(九):ElasticSearch自动化安装_ansible 源码安装 easticsearch-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏5次。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎。ElasticSearch安装包下载到ElasticSearch官网对应版本的安装包,本文以ElasticSearch 6.5.4为例。将下载好的elasticsearch-6.5.0.tar.gz传到/opt/ansible/roles/files目录下,本文将所有tar安..._ansible 源码安装 easticsearch

tensorflow与keras的关系_简述tensorflow2与keras的关系-程序员宅基地

文章浏览阅读539次。Keras是基于TensorFlow和Theano(由加拿大蒙特利尔大学开发的机器学习框架)的深度学习库,是由纯python编写而成的高层神经网络API,也仅支持python开发。它是为了支持快速实践而对tensorflow或者Theano的再次封装,让我们可以不用关注过多的底层细节,能够把想法快速转换为结果。Keras默认的后端为tensorflow,如果想要使用theano可以自行更改。ten..._简述tensorflow2与keras的关系

python:实现从pdf txt docx中提取表格(附完整源码)_python pdf转doxc 提取表格-程序员宅基地

文章浏览阅读155次。python:实现从pdf txt docx中提取表格(附完整源码)_python pdf转doxc 提取表格

阿里开发手册 嵩山版-编程规约 (三)代码格式_嵩山版的阿里巴巴-程序员宅基地

文章浏览阅读1.1k次,点赞27次,收藏27次。《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册,当前的版本是嵩山版。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。所以本手册以_嵩山版的阿里巴巴

推荐文章

热门文章

相关标签