场景一:撤销工作区的修改(未执行git add)

指令:git checkout 【目录或文件名】

实例:

1、修改了test.txt文档,git status 会出现如下提示:

2、git checkout test.txt,无提示

3、git status,显示干净的工作区

场景二:撤销暂存区的修改(已执行git add,但未执行git commit)

指令:git reset 【HEAD或某一版本号】【可选:文件名】(HEAD指向最近的一个版本,一个commit就是一个版本,版本号可以通过git log指令查询)

注意:git reset有三个参数,--soft、--mixed、--hard,如果不指定,会默认指行--mixed参数,它的意思是将指定版本之后的修改(在本场景中,就是最近一次提交后的修改),都撤回到工作区中,也就是未执行git add的状态。如果加上--hard参数,就会放弃指定版本之后的所有修改,会出现干净的工作区与暂存区(此参数会在下个场景展示实例)。如果加上--soft参数,则会把指定版本之后的修改撤回到暂存区,工作区内容不变。

实例:

1、修改test.txt文档,并提交修改到暂存区

2、git reset HEAD

3、git status,显示修改撤回到了工作区

场景三:撤销已经执行git commit的修改(真正意义上的版本回退)

指令:git reset或git revert

git reset与git revert的区别:

git reset会修改git log的版本历史,如果你回退到了几个版本前,那git log时就会发现你丢失了被回退的版本。而git revert不会修改版本历史,你回退哪个版本,git revert就会新建一个提交,把你要回退版本的修改抵消掉。如果没看懂,请看实例:

实例一:git reset

1、git log --pretty=online 显示有三个版本

2、git reset --hard 版本号(输前几位即可),回退版本到Second commit

3、git log --pretty=online,丢失版本Third commit

实例二:git revert

1、git log --pretty=online 显示有三个版本

2、git revert 版本号,抵消某个版本与其之后版本的修改,注意,这里的逻辑与git reset不一样,如果想回到Second commit的版本,就需要抵消掉Third commit的修改。所以这里应该git revert Third commit的版本号

3、revert的过程中可能会有冲突,git status查看冲突位置,解决冲突,git commit 文件名(无需git add)

4、git log --pretty=online,Third commit并没有丢失,而是多了一个revert版本,你可以 git log -p查看每个版本的修改,发现revert的版本所做的修改与Third commit恰恰相反,正好抵消掉了它的修改。

忠告:如果你的回退涉及到了远程分支,在版本回退时最好使用revert,因它没有修改版本历史;如果使用reset,因为你的reset操作,会使你比远程少了几个提交,远程会提示你落后于远程版本,应该先git pull代码,那么你的reset操作又有何意义呢?(git push -f 强推可以做到,但不推荐这样做)

Git撤销修改场景及对应指令(checkout、reset、revert)详解相关推荐

  1. git 代码回滚 reset revert 详解 IDEA操作 4种reset区别

    问题描述: 我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退.回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 rever ...

  2. GIT撤销修改 restore

    撤销修改 GIT 撤销修改,主要利用 git restore 命令.现在,我们来假象一个使用场景.当我们大半夜战至性头时,一上头不小心在文件中写了句不该写的话"老板是个大煞笔"!并 ...

  3. git checkout 命令图文详解

    git checkout 命令图文详解 git checkout branchname (切换本地分支) 切换远程分支 放弃修改 git checkout . git checkout -- file ...

  4. git reset 命令详解(一)—— Git 学习笔记 07

    git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...

  5. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

  6. 我的世界服务器ess配置信息,我的世界ess指令大全及用法详解

    我的世界ess指令大全及用法详解告诉你<我的世界>是一款风靡全球的沙盒游戏,其中哟很多的指令可以帮助玩家更好的游戏.ess指令在ess插件运行中十分重要的一部分,但是很多新手玩家在刚开始接 ...

  7. 我的世界ess服务器信息,我的世界ess指令怎么用 ess指令大全及用法详解

    我的世界ess指令都有哪些?作为风靡全球的沙盒游戏,我的世界带给玩家太多的乐趣.为了能更方便的游戏,ess指令能帮助我们更好的游戏.很多新手玩家刚接触就被搞晕了,这么多的指令看起来有些复杂.下面就由小 ...

  8. 我的世界服务器ess配置文件,《我的世界》ess指令大全及用法详解

    我的世界是一款风靡全球的沙盒游戏,其中哟很多的指令可以帮助玩家更好的游戏.ess指令在ess插件运行中十分重要的一部分,但是很多新手玩家在刚开始接触的时候都不是太了解,下面安卓游戏小编就为大家带来我的 ...

  9. 欧盟包装指令94/62/EC详解

    欧盟包装指令94/62/EC详解 欧盟包装指令94/62/EC详解,欧盟包装和废弃包装物指令对包装材料进行管制,主要原因在于包装材料常在使用过后,被消费者任意地丢弃至环境土壤中,其中所含的危害物质将会 ...

最新文章

  1. AI一分钟|阿里成立“罗汉堂”;vivo微信人脸识别支付下半年商用
  2. 移动端手势操作--两点同时点击的实现方案
  3. activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...
  4. 算法-排序-k排序(算法导论第三版第八章思考题8-5)
  5. linux ssh 插件,玩转VSCode插件之Remote-SSH的使用情况
  6. Ubuntu20.04安装ROS Noetic
  7. 浅谈csdn写博客几年来的感受———已结题
  8. 解决IDEA 打开Springboot项目提示 Unmapped Spring configuration files found.
  9. 谷歌是如何跌下神坛的?
  10. 金山WPS2018安卓实习面试经历
  11. 微信JSSDK invalid signature签名错误的解决方法
  12. [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
  13. txt文本的魔数到底是多少
  14. win10安装程序无法正常启动
  15. thinkpad T400 X301 X230 T510 w500 W530 dell6400 dell1420 e6320 e6420 M6800 X201expresscard扩展nvme盘
  16. Win10在线升级Win11(绕过TPM2.0)
  17. ALPEN阿尔卑斯山时间管理法
  18. 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》阅读笔记(二)
  19. NASA官网下载全球雨量数据
  20. windows通过Sakura Frp内网穿透实现远程控制

热门文章

  1. 关于H3C iNode防代理功能会将pplive等软件检测为代理而下线问题的解决方法
  2. Redis操作ZSet相关API
  3. 登录方式1:MySQL自带客户端
  4. Nacos源码NacosServiceRegistryAutoConfiguration
  5. SpringAMQP--入门案例的消息发送
  6. AnnotationScopeMetadataResolver 解析作用域元数据
  7. Filter_细节_过滤器拦截路径配置
  8. 上传文件漏洞防御手段
  9. Zuul鉴权和添加用户服务
  10. mysql的索引介绍_1