在使用 git 的过程中,不可避免地需要使用 reset 操作,也不可避免地出现 reset 误操作的情况。
reset 有 soft/mixed/keep/hard 四种模式,前三种就不说了,误操作的时候一般都比较容易找回,下面就来说说 hard 这种方式的 reset 该如何找回本地提交的记录和文件。
git reset --hard XXX
是一种强硬的文件和提交一起回退的 reset 方式,并且会自动保存,让你无论从 git log
或者文件历史记录里都无法找到 reset 分支之后的记录,堪称一绝。
不过如果误操作了也不用怕(比如 reset 到了更早的分支,导致正在使用的代码丢失),git 还给我们准备了一粒后悔药,那就是 reflog
。
当使用 git reset --hard XXX
重置到了错误的分支之后,使用 git reflog
命令可以看到分支的操作记录:
1 | huang@LAPTOP-46T99JS6 MINGW64 ~/Workspace/IdeaProjects/github.com/huangzhongzhang/NPC (master) |
可以看到,我在提交了 b49b5dc
版本的记录后,有过一次 reset 操作,而正是这次 reset 操作,使我本地的两次提交记录都丢失了。
找到操作记录后,我们只需再执行一次 reset
,即可还原到我们所需要的分支:
1 | huang@LAPTOP-46T99JS6 MINGW64 ~/Workspace/IdeaProjects/github.com/huangzhongzhang/NPC (master) |
关于 git reset
和 git reflog
的更多资料请参考:
http://www.worldhello.net/gotgit/02-git-solo/040-git-reset.html