在 Git 中提交之前恢复已删除的文件

我们使用 git checkoutgit reset 命令在提交之前恢复已删除的文件。 Git 为我们提供了强大的选项来使用这些命令来完成复杂的任务。

我们可以先取消暂存已删除的文件,然后在单独的步骤中将其恢复到工作树中。 或者,我们可以将这两个操作合并为一个步骤。

本文展示了使用单个命令批量取消删除多个文件的巧妙技巧。


在 Git 中使用 reset 和 checkout 命令在提交之前恢复已删除的文件

首先,让我们建立一个存储库并添加一些文件。 它看起来像这样:

initial repo before deletes

我们的前几次提交在日志中看起来像这样:

initial repo commits

我们现在使用 rm 命令删除一个文件。

$ git rm file7.txt

删除的文件 file7.txt 不再存在于我们的存储库中。

delete file

rm 的默认行为是自动暂存删除更改。

rm autostages deletion

我们现在继续在提交之前恢复已删除的文件。

首先,我们使用重置命令取消暂存删除。

$ git reset <commit_hash> [--] <path_to_file>

此命令将索引恢复到与 path_to_file 参数匹配的所有文件的 commit_hash 状态。

$ git reset HEAD --file7.txt

这会将索引恢复到 file7.txt 的 HEAD。 HEAD 指向我们的最后一次提交。

记住,我们还没有提交删除,所以我们最后一次提交是没有删除条目的。

本质上,我们使用此命令取消暂存已删除的文件。

git reset unstage change

unstage deleted file

接下来,我们使用 git checkout 命令恢复工作区中被删除的文件。

$ git checkout [--] <path_to_file>

checkout 使用此表单中的索引覆盖工作树中的内容。

git checkout -- file7.txt

git restore deleted file 2 steps


在 Git 中使用 git checkout 命令在提交之前恢复已删除的文件

git checkout 命令为我们提供了一个表单,我们可以在其中将上述两个步骤合二为一。

$ git checkout <commit> [--] <path_to_file>

在这种形式下,git checkout 会使用提交覆盖索引和工作区中的内容。

$ git checkout HEAD -- file7.txt

HEAD 指向我们的最后一次提交。 我们没有提交删除,所以我们最后一次提交并不知道删除操作。

git undelete single step checkout


Git提交前恢复一批删除的文件

如果我们删除了一堆文件并且没有提交怎么办? 假设我们删除了 1000 个文件,现在我们想要将它们全部恢复。

delete several files

将上述命令输入 1000 次不是程序员的工作方式。 相反,我们可以在路径说明符中使用通配符来匹配多个文件并使用单个命令取消删除它们。

git reset HEAD .

这与上面的命令相同,只是我们将 file7.txt 替换为 . 通配符。 这 . 告诉 git 匹配所有文件。

因此,此命令取消暂存我们所有已删除的文件。 然后我们在工作区恢复它们。

$ git checkout .

与 file7.txt 相同的命令再次替换为 . 通配符。 它一次性恢复所有未暂存的删除。

batch restore deletions

all deleted files restored

查看笔记

扫码一下
查看教程更方便