We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
在上一期(第 68 期(技巧):git 时光机(一))我们知道可以通过 git reset --hard 命令来将文件回滚到特定版本。我们当时是想将文件回滚到“第3关掉宝前存档”,然而,我们不小心搞错了版本,将文件回滚到了“第1关BOSS门口存档”:
git reset --hard
git reset --hard 98810
这时用 git log 命令会发现后面的三次提交记录都没了:
git log
commit 98810af8ef54c37e1216367be0e00a98acc93f28 Author: wingmeng <wingmeng@qq.com> Date: Wed Jul 24 17:42:21 2019 +0800 第1关BOSS门口存档
不用慌,此时可以使用 git reflog 命令来救场,它可以查看所有操作记录(包括已经被删除的 commit 记录和 reset 的操作):
git reflog
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 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门口存档
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在上一期(第 68 期(技巧):git 时光机(一))我们知道可以通过
git reset --hard
命令来将文件回滚到特定版本。我们当时是想将文件回滚到“第3关掉宝前存档”,然而,我们不小心搞错了版本,将文件回滚到了“第1关BOSS门口存档”:这时用
git log
命令会发现后面的三次提交记录都没了:不用慌,此时可以使用
git reflog
命令来救场,它可以查看所有操作记录(包括已经被删除的 commit 记录和 reset 的操作):有了这些记录,我们就可以方便的穿越到误操作之前了。然而,糟糕的是,在我们上一次误操作之后,又新提交了一个 commit:
这时该如何恢复之前的三次提交记录,又保留最后一次的提交呢?
$ git reset --hard f9432bb # 回滚到误操作之前的版本
此时使用
git log
可以看到之前删除的记录又回来了:好的,之前的三次提交记录是回来了,但最后一次新的提交“最终关存档”没了,如何加上来呢?这时候就要用到“摘樱桃”了:
运行后,“最终关存档”就回来了,此时文件里可能会有一些冲突,需要打开文件手动处理,处理好后,再提交一次:
git add game.md git commit -m "最终关存档"
最终的结果如下:
The text was updated successfully, but these errors were encountered: