跳至内容
GitTree
Git 指南阅读 1 分钟

如何在 Git 中恢复已删除的文件

正确的命令取决于一件事:删除的程度。以下是三种情况,如何找到删除文件的提交,以及 Git 无法恢复的内容。

撰写者 Kodmora

GitTree 背后的软件公司

已更新
  • 撤消和恢复
  • 提交历史
在此页面上

要恢复尚未提交的已删除文件,请运行 `git restore path/to/file`。 如果删除已在提交中,请使用 git log --diff-filter=D -- path/to/file 查找该提交,然后运行 git restore --source=<commit>^ -- path/to/file。 Git 可以恢复它曾经存储的任何内容,因此提交的文件几乎总是可以恢复的。

哪个命令适合您的情况
发生了什么命令
已删除,未暂存git restore path/to/file
已删除并暂存git restore --staged --worktree path/to/file
在提交中删除git restore --source=<commit>^ -- path/to/file

如何恢复刚刚删除的文件?

如果 git status 在“未暂存提交的更改”下列出该文件,请将其从索引复制回来:

git restore src/app.ts

git rm 后如何恢复文件?

git rm 删除文件并暂存删除,因此它显示在“要提交的更改”下。从 HEAD 恢复索引和工作文件夹:

git restore --staged --worktree src/app.ts

如何恢复在先前提交中删除的文件?

首先找到删除它的提交。 --diff-filter=D 仅显示删除:

git log --oneline --diff-filter=D -- src/app.ts

该提交不再拥有该文件,但其父级拥有该文件。 ^ 的意思是“父版本”,因此这将恢复删除之前的最后一个版本:

git restore --source=4f2a9c1^ -- src/app.ts

该文件将作为新的更改返回到您的工作文件夹。检查它,然后像任何其他编辑一样暂存并提交它。在 2.23 之前的 Git 上,git checkout 4f2a9c1^ -- src/app.ts 执行相同的工作并暂存文件。

如果我不记得完整路径怎么办?

在每个分支中搜索文件名。保留引号,以便 Git 扩展模式而不是 shell:

git log --all --diff-filter=D --name-only --oneline -- "**/app.ts"

Git 不能带回什么?

  • 从未暂存或提交的文件。 Git 从未存储它。检查编辑器的本地历史记录或系统备份。
  • 文件被 `git clean` 删除。 它们未被跟踪,因此 Git 不保留任何副本。
  • 未暂存的编辑替换为 `git restore`。 该命令会覆盖它们,因此仅在您需要时才运行它。

有时可以使用 git fsck --lost-found 找到暂存一次然后丢失的文件,该文件列出了没有任何指向的 blob。关于撤消重置、变基或提交 的帖子介绍了丢失的提交,关于文件历史记录和责任 的课程展示了如何追溯文件的过去,而丢弃和清理 的指南则解释了 GitTree 首先保存的内容。

如何取回 GitTree 中的文件

  1. 先按撤消

    如果 GitTree 丢弃或清除了文件,请按工具栏中的 撤消。在删除任何内容之前,它会在 refs/ogt/trash 下保存恢复快照。

  2. 搜索历史记录

    使用提交图搜索来查找触及该文件的提交,然后打开该提交以读取其版本。

  3. 使用 Lost & Found 来查找丢失的提交

    选择 工具 → 丢失和找到 以查找不再有分支指向的提交。

GitTree 中的 Lost & Found 列出了没有分支指向的提交和存储,因此您可以将它们恢复。
GitTree 中的 Lost & Found 列出了没有分支指向的提交和存储,因此您可以将它们恢复。

常见问题

git恢复和git checkout有什么区别?

Git 2.23 中添加了 git restore 来完成一项工作:恢复文件。 git checkout 还会切换分支,这很容易被误用。

如何查看文件何时被删除?

运行git log --diff-filter=D -- path/to/file。它列出了删除它的提交及其作者和日期。

为什么 git Restore 说路径规范不匹配?

Git 不知道您选择的源路径。如果文件在提交中被删除,请使用 --source=<commit>^ 从该提交的父级恢复它。

我可以恢复已删除的文件夹吗?

是的。传递文件夹路径而不是文件,例如 git restore --source=<commit>^ -- src/utils。

恢复的文件会自动提交吗?

不会。它显示为您的工作文件夹中的更改。准备好后进行暂存并提交。

来源

有关其他产品的声明已根据其位于 2026年11月7日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。