实战

回退

1、删除之前的提交

git reset --hard id

推送到远程

git push -f

【git log中确实删除了,但是拿到可以恢复】

2、不删除之前的提交

git revert id

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是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们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”这个版本来实现。

也可以通过github网站图形化界面查看版本号:

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

反做成功!

Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git log
commit fae9916b (HEAD -> uat-tmp, origin/uat-tmp )
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 21:40:21 2020 +0800 commit TaskStatusType commit 955be39b
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:39:39 2020 +0800 feature 1、开团去除人员配置-3; commit 71a55be3
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:34:25 2020 +0800 feature 1、开团去除人员配置-2;2、PositionType+BOSS; commit a5cb51f
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:29:54 2020 +0800 【reset --hard到当前最新的,再push则对远程分支无影响;】 Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git reset fae9916b --hard
HEAD is now at fae9916 commit TaskStatusType Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git push origin -f
Username for 'https://code.aliyun.com': shouzheng
Everything up-to-date Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git log
commit fae9916b (HEAD -> uat-tmp, origin/uat-tmp )
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 21:40:21 2020 +0800 commit TaskStatusType commit 955be39b
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:39:39 2020 +0800 feature 1、开团去除人员配置-3; commit 71a55be3
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:34:25 2020 +0800 feature 1、开团去除人员配置-2;2、PositionType+BOSS; commit a5cb51f
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:29:54 2020 +0800 【目标--hard到A,但是却--hard到了A之前的A-1,并且push了;
请问怎么回到A?】 Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git reset 71a55be3 --hard
HEAD is now at 71a55be feature 1、开团去除人员配置-2;2、PositionType+BOSS; Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git push origin -f
Username for 'https://code.aliyun.com': shouzheng
Total 0 (delta 0), reused 0 (delta 0)
To https://code.aliyun.com/oo_game/app_server.git
+ fae9916...71a55be uat-tmp -> uat-tmp (forced update) 【答案:继续--hard A,再push;】
Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git log
commit 71a55be3 (HEAD -> uat-tmp, origin/uat-tmp )
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:34:25 2020 +0800 feature 1、开团去除人员配置-2;2、PositionType+BOSS; commit a5cb51f
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:29:54 2020 +0800 feature 1、开团去除人员配置;2、PositionType+BOSS; commit 465c7fc46923841c43c0e158f4831fb2849567ad
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 11:09:38 2020 +0800 fix turn off DEBUG commit 065f40bdbb333b23760d041c9ea8826a770a77ba
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 11:00:43 2020 +0800 feature add API-VERSION to requestInfo.log commit 83b68b6d04255b6c5a1a0244a500a54267dc865d
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 10:19:44 2020 +0800 modify Permissions+Authentication commit b59b5064ba454c8e232b07891ef9603dedc978fd
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 09:56:39 2020 +0800 modify list-->tuple commit eda713553ecaff1b0a2bc70732838cd81fcaeb2b
:...skipping...
commit 71a55be3 (HEAD -> uat-tmp, origin/uat-tmp)
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:34:25 2020 +0800 feature 1、开团去除人员配置-2;2、PositionType+BOSS; commit a5cb51f
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:29:54 2020 +0800 feature 1、开团去除人员配置;2、PositionType+BOSS; Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git reset 955be39b --hard
HEAD is now at 955be39 feature 1、开团去除人员配置-3; Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git push origin -f
Username for 'https://code.aliyun.com': shouzheng
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 2 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 710 bytes | 142.00 KiB/s, done.
Total 8 (delta 7), reused 0 (delta 0)
To https://code.aliyun.com/oo_game/app_server.git
71a55be..955be39 uat-tmp -> uat-tmp Admin@PC MINGW64 /d/jt/myAliServer/app_server (uat-tmp)
$ git log
commit 955be39b (HEAD -> uat-tmp, origin/uat-tmp)
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:39:39 2020 +0800 feature 1、开团去除人员配置-3; commit 71a55be3
Author: Shawn <g1e2t3@qq.com>
Date: Wed Apr 1 16:34:25 2020 +0800

  

目标--hard到A,但是却--hard到了A之前的A-1,并且push了;
请问怎么回到A?
 
 
 

Git恢复之前版本的两种方法reset、revert的更多相关文章

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

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

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

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

  3. 更改Ubuntu默认python版本的两种方法python-> Anaconda

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.一般Ubuntu默认的Python版本都为2. ...

  4. Cisco设备IOS的恢复方法 两种方法

    如果不小心把Router或者Switch的IOS删除了,特别是Flash中的IOS和ROM中的Mini IOS都没有了的话,连启动都不行的话,有什么方法恢复它呢?答案是方法不只一种,而是两种.其实是我 ...

  5. GitHub常用上传文件的两种方法 附带常见的问题及Git安装教程

    从早上下课到现在一直在琢磨如何给Github下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan. ...

  6. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  7. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  8. 两种方法上传本地文件到github

    https://www.jianshu.com/p/c70ca3a02087 自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败.最重要的 ...

  9. 两种方法上传本地文件到github(转)

    自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败.最重要的原因是我习惯本地编辑,完成以后再一起上传github.看过了几个教程,总结出最 ...

随机推荐

  1. 根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小

    public R startProcess(@RequestBody ShouldCredentialPayable bean) { System.out.println("应付贷项参数be ...

  2. Spring Boot面试杀手锏————自动配置原理

    转:https://blog.csdn.net/u014745069/article/details/83820511 引言不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技 ...

  3. react脚手架抽离webpack报错解决

    我们在写react项目的时候,可能原有的webpack配置不满足我们的需求,需要自己去配置,可是你在创建脚手架的时候并不能在外部找到webpack文件,脚手架的webpack文件在node_modul ...

  4. 对HTTP请求接口资源下载时间过长的问题分析

    问题描述 我司某产品线有指定业务接口customQuery在线上环境中,与首页一起打开时下载数据的时间明显过长(平均可以达到2s) 注: "与首页一起打开" 的含义是指用户进入WE ...

  5. ABP vNext EventBus For RabbitMQ 分布式事件总线使用注意事项_补充官网文档

    [https://docs.abp.io/zh-Hans/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration](ABP vNext官方文档链接) ...

  6. Linux下使用acme.sh申请和管理Let’s Encrypt证书

    关于Let's Encrypt 免费SSL证书 Let's Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla.Cisco.Akamai.IdenTrus ...

  7. Go语言快速安装手册

    Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ia ...

  8. JavaScript高级程序设计(第4版)知识点总结

    介绍 JavaScript高级程序设计 第四版,在第三版的基础上添加了ES6相关的内容.如let.const关键字,Fetch API.工作者线程.模块.Promise 等.适合具有一定编程经验的 W ...

  9. jquery表格插件Datatables使用、快速上手

    Datatables使用 一.简介 官网:https://datatables.net/ 中文官网:http://datatables.club/ Datatables是一款jquery表格插件.它是 ...

  10. 十一:WEB渗透必懂知识点

    简述WEB层面上的漏洞以及类型,具体漏洞的危害等级, 如何形成以及如何发现 右边权重大于左边 CTF,SRC,红蓝对抗,实战 简要说明以上漏洞危害 简要说课以上漏洞等级划分 简要说明以上漏洞重点内容 ...