Git是一个非常强大又好用的工具。基本是所有公司在用的代码管理工具。
今天我们主要来讲一讲具体当某一次提交,被我们一不小心弄丢后怎么找回来。
找回
先假定一个最简单的情况,我运行这段的代码git reset --hard HEAD^3。
这么一来,运行git log,你就会发现当前的前三个提交都没了。
这个时候怎么办呢?
Git提供了一个命令:git reflog。执行之后,你会发现它列出来了你最近的所有提交记录。
如果觉得还不够详细的话,那么就执行git log -p,查看你最近所有详细的提交记录。
这个时候,你只有找到对应你丢失的提交,然后执行git checkout xxsha-1xx。
你就会惊讶的发现你丢失的内容都回来了。
极端情况
因为reflog数据是保持在.git/logs/下的,如果你删除了这个目录。
那么,就可以执行git fsck --full。用来显示所有未被其他对象引用的对象。
无解情况
那就是你把.git/objects目录删除了。
为什么删了这个就不行呢?
原理
说白了,所有的提交内容都保存在.git/objects目录下。
而.git下的其他目录,比如branches, refs都只是引用,引用的都是objects目录下对应的每次提交的commit id。
而我们使用的命令都不会主动去删除objects下的数据。