你打游戏的时候,有一关很难,每次都死在这里,你肯定不希望每次都从第一关开始打,所以你会在这一关保存一下游戏记录,死掉之后每次从这个记录重新挑战。就像游戏存盘一样,我们工作一段时间也会保存一次记录,以免需要回退到之前的某个时间。
我再写一点东西,添加一行 reset
vim README.md
现在README.md是这样的
write something
back
reset
提交一下
git add .
git commit -m 'add reset'
使用git log
看一下当前的日志状态
commit 7558812fa8052de97369c5d0929ccc0dc96057a1 (HEAD -> master)
Author: Vien <xiaowei@magicmoma.com>
Date: Fri Oct 18 12:31:45 2019 +0800
add reset
commit b86547ac445e4dbfc31504c6cbc57456271650ac
Author: Vien <xiaowei@magicmoma.com>
Date: Sat Oct 12 14:29:42 2019 +0800
back
commit 0e7523345b03fecff4a55898695dd3f3a1540d8d
Author: Vien <xiaowei@magicmoma.com>
Date: Thu Oct 10 15:45:47 2019 +0800
first release
commit f870cc5e14ddfe7abbf0c44a096bd11d308637d0
Author: Vien <xiaowei@magicmoma.com>
Date: Thu Oct 10 15:24:35 2019 +0800
我的第一次提交
(END)
如果觉得太乱,可以加一个 --pretty=oneline
参数 git log --pretty=oneline
7558812fa8052de97369c5d0929ccc0dc96057a1 (HEAD -> master) add reset
b86547ac445e4dbfc31504c6cbc57456271650ac back
0e7523345b03fecff4a55898695dd3f3a1540d8d first release
f870cc5e14ddfe7abbf0c44a096bd11d308637d0 我的第一次提交
(END)
前面那一串是每次 commit 的 id 也就是版本号,使用sha1计算出来的一个很大的数字,用16进制表示,之所以用很大的数字也是因为Git是一个分布式管理的版本控制系统,为了避免版本号冲突。这个commit的id也就是我们会用来回退版本用到的东西。
如果我们要回退到上一个版本,我们可以指定版本号 b86547ac445e4dbfc31504c6cbc57456271650ac
也可以用 HEAD^
git reset b86547ac445e4dbfc31504c6cbc57456271650ac
或者
git reset --hard HEAD^
HEAD
其实可以理解为当前的版本指针,然后 一个^
就是指HEAD往前一个版本, 两个 ^
就是往前两个版本,如果太多的话,你也搞不清到底是该退几个,还是指定版本号比较安全一些,也是我喜欢用的方式。另外,版本号其实不必全写,比如 git reset b86547ac44
只用很短的一部分,他也是可以找到的,但是也不要太短,1位2位数可就过分了。
回退后再看一下:
git log --oneline
b86547a (HEAD -> master) back
0e75233 first release
f870cc5 我的第一次提交
果然回退到之前的版本了,刚回退完,后悔了(刚穿越到唐朝,发现还是现代生活好,想重返未来),然而log里已经没有之前的版本id了,如果你之前打印的日志还在,可以轻松找到那个id,但是如果找不到了呢。我们可以使用reflog
查看
git reflog
b86547a (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
7558812 HEAD@{1}: commit: add reset
b86547a (HEAD -> master) HEAD@{2}: commit: back
0e75233 HEAD@{3}: reset: moving to 0e7523345b03fecff4a55898695dd3f3a1540d8d
ab07db3 HEAD@{4}: commit: bacj
0e75233 HEAD@{5}: commit: first release
f870cc5 HEAD@{6}: commit (initial): 我的第一次提交
可以看到我们的操作记录,而且也能找到那个消失不见的版本号 7558812
,我们再回到那个版本:
git reset 7558812
查看日志
git log --oneline
7558812 (HEAD -> master) add reset
b86547a back
0e75233 first release
f870cc5 我的第一次提交
(END)
是不是又出现了!
HEAD
指向当前版本,HEAD^
指前一个版本git reset 版本id
回退到某个版本git reflog
,确定要回到未来的哪个版本