Git是一个版本控制系统,帮助你跟踪项目生命周期中的变化。它保留了项目的历史,让你和你的团队成员在整个过程中有效地协调。
可能有这样的情况:你删除了一个文件,你想恢复它。好消息是,在使用版本控制系统(VCS)时,你可以 - 大多数时候 - 恢复文件。
在本教程中,我们将学习Git提供的不同方法来恢复被删除的文件。
如何在提交更改后恢复文件
假设你提交了一个更改,但做了一个硬重置 (git reset --hard HEAD) 到一个不同的提交,这个提交删除了你当前分支的最新提交。

硬重置的解释。
在这种情况下,你可以使用git checkout 或git reflog 来恢复文件。
你可以从命令中找到前一次提交的哈希值。git log.
之后,只需用......恢复到之前的提交即可。
git checkout <hash-id>
如果你没有哈希ID,你可以使用命令git reflog 。
reflog 是一种记录机制,它记录了所有的修改和它们唯一的 。hash-id
下面是git reflog.的一个输出例子:

的输出git reflog
挑选提交ID并使用它来恢复到该提交。
git reflog <hash-id>
当更改被暂存但未提交时如何恢复文件
假设你用git add <file-name> 缓存了一个文件,然后在提交前用git reset --hard HEAD 进行了硬重置。之后,你发现被缓存的文件不见了。在这种情况下,你也可以恢复这些文件。
我们可以使用git fsck 命令来恢复硬重置后的文件。
什么是git fsk ?
git fsck 指的是文件系统检查。它检查 目录中所有不属于任何变化的 "悬空块"。例如,可能有一些变化是分阶段的,但没有添加到任何地方。.git

git fsck 的输出。
一旦我们能够识别 "dangling blobs",我们就可以使用git show 来查看细节:
git show f24facc98b387a375a50ba6d19193626cbfe7d45
根据不同的变化,你将能够查看你各自的变化。
你可能还想把这些变化保存在一个文件中。你可以简单地使用> 操作符将输出重定向到一个文件:
git show f24facc98b387a375a50ba6d19193626cbfe7d45 > restored_file.txt
现在,restored_file.txt 将包括提交的内容。
如何恢复既未提交也未分阶段的更改
在变更既没有被暂存也没有被提交的情况下,Git 无法帮助你恢复这些文件。
原因是这些文件并没有被添加到暂存中,Git 无法得知这些文件的状态。
在这种情况下,在临时文件或文本编辑器的缓存历史中搜索会很有帮助。
总结
在处理有风险的文件时,最好是使用 VCS。通过这种方式,文件将被保存下来,并减少意外数据丢失的机会。
在本教程中,我们学习了如何恢复被删除的文件,无论它们是阶段性的还是提交的。
我希望你认为本教程对你有帮助。谢谢你读到最后。
你从本教程中学到的最喜欢的东西是什么?请在Twitter上告诉我!
你也可以在这里阅读我的其他文章。