Git恢复之前版本的两种方法reset、revert(图文详解)

Git恢复之前版本的两种方法reset、revert(图文详解)一 问题描述在利用 github 实现多人合作程序开发的过程中 我们有时会出现错误提交的情况 此时我们希望能撤销提交操作 让程序回到提交前的样子 本文总结了两种解决方法 回退 reset 反做 revert 二 背景知识 git 的版本管理 及 HEAD 的理解使用 git 的每次提交 Git 都会自动把它们串成一条时间线 这条时间线就是一个分支 如果没有新建分支 那么

2019/7/27 修改更新

一、问题描述

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

二、背景知识

git的版本管理,及HEAD的理解

三、解决方法

方法一: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是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:
这里写图片描述
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。




具体操作:

git revert -n 8bc9adc6fc4d242cd41daeb13aeb9861 

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

git commit -m "revert add text.txt" 
git push 

反做成功!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176812.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:59
下一篇 2026年3月26日 下午8:59


相关推荐

  • 原来写在BlogBus(博客大巴)上的文章搬运到这里!~

    原来写在BlogBus(博客大巴)上的文章搬运到这里!~为什么 80 的码农都做不了架构师 gt gt gt

    2026年3月18日
    2
  • 基于yolov4的目标检测_yolov3目标检测

    基于yolov4的目标检测_yolov3目标检测1项目的克隆和必要的环境依赖1.1项目的克隆YOLOv5的代码是开源的,因此我们可以从github上克隆其源码。不得不说GitHub的确是全球最大的男性交友网站,里面的人个个都是人才,yolov5发布才一年左右的时间,YOLOv5就已经更新了5个分支了,分别是yolov5.1-yolov5.5分支。该项目就是利用的yolov5.5分支来作为讲解。首先打开yolov5的github的https://github.com/ultralytics/yolov5/tree…

    2022年10月16日
    3
  • 混合高斯背景建模原理_高斯图模型

    混合高斯背景建模原理_高斯图模型在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景。运动物体检测的问题主要分为两类,摄像机固定和摄像机运动。对于摄像机运动的运动物体检测问题,比较著名的解决方案是光流法,通过求解偏微分方程求的图像序列的光流场,从而预测摄像机的运动状态。对于摄像机固定的情形,当然也可以用光流法,但是

    2025年5月28日
    3
  • 一篇文章说清楚OpenClaw?是什么?能干嘛?怎么用?如何安装?

    一篇文章说清楚OpenClaw?是什么?能干嘛?怎么用?如何安装?

    2026年3月13日
    3
  • httprunner(5)编写测试用例

    httprunner(5)编写测试用例编写测试用例HttpRunnerv3.x支持三种测试用例格式pytest,YAML和JSON。官方强烈建议以pytest格式而不是以前的YAML/JSON格式编写和维护测试用例格式关系如下图所示

    2022年7月31日
    9
  • Java打破双亲委派机制「建议收藏」

    1.自定义加载器沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方法即可。①先定义一个待加载的类Test,它很简单,只是在构建函数中输出由哪个类加载器加载。publicclassTest{publicTest(){System.out.println(this.getClass().getClassL…

    2022年4月8日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号