
文章插图
我们发现这个文件回到了被add之前的状态 。
但假如我们不小心已经commit了 , 已经提交进git仓库了之后才发现 , 这个时候应该怎么办?

文章插图
这个时候我们需要做的是撤销这个commit , 给我们一次重新来过的机会 。我们使用的命令是git reset --soft HEAD^ , git reset命令非常危险 , 我们操作的时候需要谨慎 。如果不小心用了--hard参数会回滚所有的操作 , 直接恢复到某一个commit时的状态 。比如说我们当前在version3 , 我们回到了version1 , 如果使用--hard操作的话 , version2和version3的所有改动都会丢失 。因此一定谨慎使用--hard , 最好使用--mixed或者是--soft , 它不会修改本地的文件 。关于这两个的区别 , 我们将会以后在介绍git reset命令的时候详细介绍 。
这里的HEAD指的是当前git节点的指针 , HEAD^表示的是上一个版本 。当然我们也可以用commitid来代替 。

文章插图
我们发现一切都恢复到了illustrate unstage commit这个提交之前的状态 , 那么我们只需要从缓存当中删除a.test , 再次提交即可 。

文章插图
【Git操作文件的时候手贱了,怎么恢复?】这么操作完了之后你会发现在git log当中illustrate unstage commit这个提交不见了 。的确如此 , 因为它被我们撤销了 , 同样 , reset操作也会导致本地和远程状态不一样 。如果要push的话也需要-f强制进行 , 这也是一个危险的操作 , 一定要谨慎 。
撤销修改假如我们想要撤销的不是一个文件 , 而是一次修改呢?就比如我们git add了之后才发现某一个文件的修改错了 , 我们想要把它恢复到之前的状态 , 这时候应该怎么操作呢?
我们在第五篇里加上了一行废话 , 但是等我们git add了之后才发现第五篇里有这么一个无用的改动 。这时候应该怎么操作呢?

文章插图
这个时候我们想要做的是撤销这个文件的修改 , 如果我们只是要把它从暂存区中移除来恢复到git add之前的状态 , 我们可以使用git reset , 但是这个文件当中的修改依然还是存在 。这个时候我们可以用一个命令叫做checkout , 这个命令有很多种用途 , 我们先介绍其中的一种 。
我们可以使用git checkout -- filename来回滚某一个文件的改动 , 注意这个也是一个危险操作 , 它会直接将文件恢复到之前提交的状态 。中间的改动会全部丢失 , 因此一定要想好了再操作 。在git当中有一个原则 , 只要是提交过的内容几乎都是可以找回的 , 而没有提交的内容丢失之后就很难找回了 , 因此对于这种改变没有提交内容的命令 , 我们一定要小心 。

文章插图
最后我们来看下效果 , 我们checkout之后 , 第五篇文章当中的改动真的消失了 。不仅是从暂存区消失了 , 就连文件本身当中的改动也不见了 。
到这里我们常见的几种需要撤销改动的场景以及对应的方法就都介绍完了 , 对于新手来说 , 这些命令应该是非常常用的 。虽然其中的一些操作说起来危险 , 但是只要我们想清楚了再操作 , 三思而后行 , 是可以避免悲剧发生的 。而且操作危险的命令我感觉更加提升我们的能力 , 因为小心谨慎会逼迫你加深理解 。
好了 , 今天的文章就到这里 , 衷心祝愿大家每天都有所收获 。如果还喜欢今天的内容的话 , 请来一个三连支持吧~(点赞、关注、转发)
- END -
本文始发于公众号:TechFlow , 求个关注
推荐阅读
- 电脑系统如何一键还原,电脑系统一键还原怎么操作?
- Linux下diff的操作详解
- spring-boot-route 使用aop记录操作日志
- Win10系统重置和重装区别这么大,不说不知道!看完别乱操作
- 企业微信号怎么获客?这三招可复制,易操作!
- robots.txt文件的作用和写法
- MySQL服务端读取客户端文件漏洞的复现
- 一文读懂 Java操作Elasticsearch
- 全方位剖析 Linux 操作系统,太全了
- Linux中/etc/passwd配置文件详解
