当我们提交了很修改的文件后,第二天一早突然觉得,昨天的文件其实不用修改,这时候怎么办呢?
git给我们提供了吃后悔药的机会。
首先:我们可以通过git log命令查看,我们的提交记录。
$ git log commit 51b73ae20c9be52a9c1893b52cb58d9f45ed3106 (HEAD -> master) Author: YiboChen <17630508316@163.com> Date: Sun Aug 9 00:44:23 2020 +0800 在learngit文件中添加了几个字 commit 3089e7c13d1d6c1b67931531eb7bc4a5bf1af6ad Author: YiboChen <17630508316@163.com> Date: Sun Aug 9 00:28:51 2020 +0800 再次提交 commit f2aa600de1237c5943e3d402383d58b7fc136590 Author: YiboChen <17630508316@163.com> Date: Sun Aug 9 00:26:36 2020 +0800 提交另一个learngit文件
从上面的记录可以看出,我们总共提交了三次。这些提交记录,就像时间轴一样被连成了一条线。
倘若我们想要回到某个“时刻”(版本)的状态。该怎么做呢?
使用git reset --hard 版本号 命令 即可回退到某个版本(从下面可以看出 当前的版本已经回到了 "再次提交"的时候了)
$ git reset --hard 3089e7c13d1d6c1b67931531eb7bc4a5bf1af6ad HEAD is now at 3089e7c 再次提交
此时我们可以通过gitk调出可视化命令 来查看一下版本提交提示。
可以看出 提交日志就剩下两条了。也就是我们现在存在的就剩两条版本了。
这时有一种情况要考虑:你从2020年做时光机来到了1999年,结果你发现你回不去了,怎么办?
第一种情况:我们还没有关闭git bash命令窗口 还能够往上翻看到 最新的版本是什么,然后通过git reset --hard 版本号 的方式回到最新的版本。
$ git reset --hard 51b73ae20c9be52a9c1893b52cb58d9f45ed3106 HEAD is now at 51b73ae 在learngit文件中添加了几个字
使用gitk看一下现在的历史时间轴
可以看到,又恢复到了之前的三个。
第二种情况:我们已经关掉了git bash命令窗口 而且我们是第二天才想起来,之前的版本回退是自己草率了,自己想回到最新的版本,那么这时,git提供了一个git reflog命令,可以解决我们的问题。
$ git reflog 51b73ae (HEAD -> master) HEAD@{0}: reset: moving to 51b73ae20c9be52a9c1893b52cb58d9f45ed3106 3089e7c HEAD@{1}: reset: moving to 3089e7c13d1d6c1b67931531eb7bc4a5bf1af6ad 51b73ae (HEAD -> master) HEAD@{2}: commit: 在learngit文件中添加了几个字 3089e7c HEAD@{3}: commit: 再次提交 f2aa600 HEAD@{4}: commit (initial): 提交另一个learngit文件
从倒数第三行记录可以看出,最新版本的版本号是 "51b73ae",我们就仍可以通过使用git reset --hard xx命令回到最新版本了。