Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第 69 期(技巧):git 时光机(二) #72

Open
wingmeng opened this issue Jul 25, 2019 · 0 comments
Open

第 69 期(技巧):git 时光机(二) #72

wingmeng opened this issue Jul 25, 2019 · 0 comments

Comments

@wingmeng
Copy link
Collaborator

wingmeng commented Jul 25, 2019

在上一期(第 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门口存档
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant