-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
在上一期(第 68 期(技巧):git 时光机(一))我们知道可以通过 git reset --hard 命令来将文件回滚到特定版本。我们当时是想将文件回滚到“第3关掉宝前存档”,然而,我们不小心搞错了版本,将文件回滚到了“第1关BOSS门口存档”:
git reset --hard 98810
这时用 git log 命令会发现后面的三次提交记录都没了:
commit 98810af8ef54c37e1216367be0e00a98acc93f28
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:21 2019 +0800
第1关BOSS门口存档
不用慌,此时可以使用 git reflog 命令来救场,它可以查看所有操作记录(包括已经被删除的 commit 记录和 reset 的操作):
98810af HEAD@{0}: reset: moving to 98810
f9432bb HEAD@{1}: commit: 第4关十字路口
9ced26a HEAD@{2}: commit: 第3关掉宝前存档
0ad9871 HEAD@{3}: commit: 第2关打精英怪前存档
98810af HEAD@{4}: commit (initial): 第1关BOSS门口存档
有了这些记录,我们就可以方便的穿越到误操作之前了。然而,糟糕的是,在我们上一次误操作之后,又新提交了一个 commit:
git add game.md
git commit -m "最终关存档"
这时该如何恢复之前的三次提交记录,又保留最后一次的提交呢?
$ git reflog
de04aa8 HEAD@{0}: commit: 最终关存档
98810af HEAD@{1}: reset: moving to 98810
f9432bb HEAD@{2}: commit: 第4关十字路口
9ced26a HEAD@{3}: commit: 第3关掉宝前存档
0ad9871 HEAD@{4}: commit: 第2关打精英怪前存档
98810af HEAD@{5}: commit (initial): 第1关BOSS门口存档
$ git reset --hard f9432bb # 回滚到误操作之前的版本
此时使用 git log 可以看到之前删除的记录又回来了:
commit f9432bb61e19dea0009a8285ece0ff4a7ba1a73f
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:43:19 2019 +0800
第4关十字路口
commit 9ced26a67204d0b4e4661dd1d0e824a9acd13da5
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:53 2019 +0800
第3关掉宝前存档
commit 0ad987132739a525125bd987c0a7c931db6317de
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:38 2019 +0800
第2关打精英怪前存档
commit 98810af8ef54c37e1216367be0e00a98acc93f28
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:21 2019 +0800
第1关BOSS门口存档
好的,之前的三次提交记录是回来了,但最后一次新的提交“最终关存档”没了,如何加上来呢?这时候就要用到“摘樱桃”了:
git cherry-pick de04aa8
运行后,“最终关存档”就回来了,此时文件里可能会有一些冲突,需要打开文件手动处理,处理好后,再提交一次:
git add game.md
git commit -m "最终关存档"
最终的结果如下:
$ git log
commit a0a06ce10c9b1706201870cf1dd0a3352131fe9f
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 18:22:36 2019 +0800
最终关存档
commit f9432bb61e19dea0009a8285ece0ff4a7ba1a73f
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:43:19 2019 +0800
第4关十字路口
commit 9ced26a67204d0b4e4661dd1d0e824a9acd13da5
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:53 2019 +0800
第3关掉宝前存档
commit 0ad987132739a525125bd987c0a7c931db6317de
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:38 2019 +0800
第2关打精英怪前存档
commit 98810af8ef54c37e1216367be0e00a98acc93f28
Author: wingmeng <wingmeng@qq.com>
Date: Wed Jul 24 17:42:21 2019 +0800
第1关BOSS门口存档
Metadata
Metadata
Assignees
Labels
No labels