如何在Git中恢复被删除的文件--在硬重置后恢复变化

316 阅读3分钟

Git是一个版本控制系统,帮助你跟踪项目生命周期中的变化。它保留了项目的历史,让你和你的团队成员在整个过程中有效地协调。

可能有这样的情况:你删除了一个文件,你想恢复它。好消息是,在使用版本控制系统(VCS)时,你可以 - 大多数时候 - 恢复文件。

在本教程中,我们将学习Git提供的不同方法来恢复被删除的文件。

如何在提交更改后恢复文件

假设你提交了一个更改,但做了一个硬重置 (git reset --hard HEAD) 到一个不同的提交,这个提交删除了你当前分支的最新提交。

Untitled-2022-06-21-2120

硬重置的解释。

在这种情况下,你可以使用git checkoutgit reflog 来恢复文件。

你可以从命令中找到前一次提交的哈希值。git log.

之后,只需用......恢复到之前的提交即可。

git checkout <hash-id>

如果你没有哈希ID,你可以使用命令git reflog

reflog 是一种记录机制,它记录了所有的修改和它们唯一的 。hash-id

下面是git reflog.的一个输出例子:

image-155

的输出git reflog

挑选提交ID并使用它来恢复到该提交。

git reflog <hash-id>

当更改被暂存但未提交时如何恢复文件

假设你用git add <file-name> 缓存了一个文件,然后在提交前用git reset --hard HEAD 进行了硬重置。之后,你发现被缓存的文件不见了。在这种情况下,你也可以恢复这些文件。

我们可以使用git fsck 命令来恢复硬重置后的文件。

什么是git fsk

git fsck 指的是文件系统检查。它检查 目录中所有不属于任何变化的 "悬空块"。例如,可能有一些变化是分阶段的,但没有添加到任何地方。.git

image-154

git fsck 的输出。

一旦我们能够识别 "dangling blobs",我们就可以使用git show 来查看细节:

git show f24facc98b387a375a50ba6d19193626cbfe7d45

根据不同的变化,你将能够查看你各自的变化。

你可能还想把这些变化保存在一个文件中。你可以简单地使用> 操作符将输出重定向到一个文件:

git show f24facc98b387a375a50ba6d19193626cbfe7d45 > restored_file.txt

现在,restored_file.txt 将包括提交的内容。

如何恢复既未提交也未分阶段的更改

在变更既没有被暂存也没有被提交的情况下,Git 无法帮助你恢复这些文件。

原因是这些文件并没有被添加到暂存中,Git 无法得知这些文件的状态。

在这种情况下,在临时文件或文本编辑器的缓存历史中搜索会很有帮助。

总结

在处理有风险的文件时,最好是使用 VCS。通过这种方式,文件将被保存下来,并减少意外数据丢失的机会。

在本教程中,我们学习了如何恢复被删除的文件,无论它们是阶段性的还是提交的。

我希望你认为本教程对你有帮助。谢谢你读到最后。

你从本教程中学到的最喜欢的东西是什么?请在Twitter上告诉我!

你也可以在这里阅读我的其他文章。