Git撤销修改场景及对应指令(checkout、reset、revert)详解
场景一:撤销工作区的修改(未执行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)详解相关推荐
- git 代码回滚 reset revert 详解 IDEA操作 4种reset区别
问题描述: 我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退.回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 rever ...
- GIT撤销修改 restore
撤销修改 GIT 撤销修改,主要利用 git restore 命令.现在,我们来假象一个使用场景.当我们大半夜战至性头时,一上头不小心在文件中写了句不该写的话"老板是个大煞笔"!并 ...
- git checkout 命令图文详解
git checkout 命令图文详解 git checkout branchname (切换本地分支) 切换远程分支 放弃修改 git checkout . git checkout -- file ...
- git reset 命令详解(一)—— Git 学习笔记 07
git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...
- git reset 命令详解(二)—— Git 学习笔记 08
git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...
- 我的世界服务器ess配置信息,我的世界ess指令大全及用法详解
我的世界ess指令大全及用法详解告诉你<我的世界>是一款风靡全球的沙盒游戏,其中哟很多的指令可以帮助玩家更好的游戏.ess指令在ess插件运行中十分重要的一部分,但是很多新手玩家在刚开始接 ...
- 我的世界ess服务器信息,我的世界ess指令怎么用 ess指令大全及用法详解
我的世界ess指令都有哪些?作为风靡全球的沙盒游戏,我的世界带给玩家太多的乐趣.为了能更方便的游戏,ess指令能帮助我们更好的游戏.很多新手玩家刚接触就被搞晕了,这么多的指令看起来有些复杂.下面就由小 ...
- 我的世界服务器ess配置文件,《我的世界》ess指令大全及用法详解
我的世界是一款风靡全球的沙盒游戏,其中哟很多的指令可以帮助玩家更好的游戏.ess指令在ess插件运行中十分重要的一部分,但是很多新手玩家在刚开始接触的时候都不是太了解,下面安卓游戏小编就为大家带来我的 ...
- 欧盟包装指令94/62/EC详解
欧盟包装指令94/62/EC详解 欧盟包装指令94/62/EC详解,欧盟包装和废弃包装物指令对包装材料进行管制,主要原因在于包装材料常在使用过后,被消费者任意地丢弃至环境土壤中,其中所含的危害物质将会 ...
最新文章
- AI一分钟|阿里成立“罗汉堂”;vivo微信人脸识别支付下半年商用
- 移动端手势操作--两点同时点击的实现方案
- activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...
- 算法-排序-k排序(算法导论第三版第八章思考题8-5)
- linux ssh 插件,玩转VSCode插件之Remote-SSH的使用情况
- Ubuntu20.04安装ROS Noetic
- 浅谈csdn写博客几年来的感受———已结题
- 解决IDEA 打开Springboot项目提示 Unmapped Spring configuration files found.
- 谷歌是如何跌下神坛的?
- 金山WPS2018安卓实习面试经历
- 微信JSSDK invalid signature签名错误的解决方法
- [JavaScript 刷题] 搜索 - 腐烂的橘子, leetcode 994
- txt文本的魔数到底是多少
- win10安装程序无法正常启动
- thinkpad T400 X301 X230 T510 w500 W530 dell6400 dell1420 e6320 e6420 M6800 X201expresscard扩展nvme盘
- Win10在线升级Win11(绕过TPM2.0)
- ALPEN阿尔卑斯山时间管理法
- 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》阅读笔记(二)
- NASA官网下载全球雨量数据
- windows通过Sakura Frp内网穿透实现远程控制