Git 时空穿梭
这次玩一玩Git的核心技能—时空穿梭
在Quick Start中我们了解到,Git是一个版本控制系统,那么咱们就来控制一下版本。
首先,看一下readme.md的版本有哪些。用git log
命令查看
git log readme.md
输出:
commit 9624d8b969e4e0e36acd63ea5be199f2f5efa7e9 (HEAD -> master)
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:22:21 2020 +0800
change a file named readme.md
commit 365fe69b1c180cf903f9269d972d313c506cb428
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:12:43 2020 +0800
I create a new file named readme.md
可以看到有两个版本,有点少,再来一个版本,添加一行文字,具体操作略去。
看下现在的版本信息,依然是用git log
:
commit b59f8356a40dd7193943285b9b3823722b3ceccc (HEAD -> master)
Author: jiayuanxie <1131726190@qq.com>
Date: Sat Mar 14 13:17:34 2020 +0800
append a line
commit 9624d8b969e4e0e36acd63ea5be199f2f5efa7e9
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:22:21 2020 +0800
change a file named readme.md
commit 365fe69b1c180cf903f9269d972d313c506cb428
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:12:43 2020 +0800
I create a new file named readme.md
现在有了三个版本,按照时间排序,最近的在前面。
从现在开始回退,使用命令git reset --hard HEAD^^
,再用git log
查看版本:
F:\GItWork>git reset --hard HEAD^^
HEAD is now at 9624d8b change a file named readme.md
F:\GItWork>git log
commit 9624d8b969e4e0e36acd63ea5be199f2f5efa7e9 (HEAD -> master)
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:22:21 2020 +0800
change a file named readme.md
commit 365fe69b1c180cf903f9269d972d313c506cb428
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:12:43 2020 +0800
I create a new file named readme.md
可以看到,版本回退到了第二个版本“change a file name readme.md”,打开文件确实如此。
哇,真的神奇!
那么问题来了,我怎么重返未来到第三个版本呢?
Git 还是有后悔药可以吃的,翻看命令的历史记录,找到版本3的commit Id值,也就是commit后面那一串数字,利用这个就可以找回来。
F:\GItWork>git reset --hard b59f
HEAD is now at b59f835 append a line
再看一下日志:
F:\GItWork>git log
commit b59f8356a40dd7193943285b9b3823722b3ceccc (HEAD -> master)
Author: jiayuanxie <1131726190@qq.com>
Date: Sat Mar 14 13:17:34 2020 +0800
append a line
commit 9624d8b969e4e0e36acd63ea5be199f2f5efa7e9
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:22:21 2020 +0800
change a file named readme.md
commit 365fe69b1c180cf903f9269d972d313c506cb428
Author: jiayuanxie <1131726190@qq.com>
Date: Fri Mar 13 16:12:43 2020 +0800
I create a new file named readme.md
我又重返未来到版本3啦!
等下,如果我关机了,记录不就没有了嘛,我怎么看版本3的commit id呢?
git 也考虑到了,使用git reflog
命令就可以查看命令历史。
那如果不小心改错了文件,或者撤销本次修改怎么办?
你可以发现,Git会告诉你,git checkout -- file
可以丢弃工作区的修改:
git checkout -- readme.md
命令git checkout -- readme.md意思就是,把
readme.md`文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.md
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.md
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
小结
现在总结一下:
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。- 穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 - 要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
感谢
感谢廖雪峰老师详细的基础教程!