如何在 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.tsgit 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 中的文件
先按撤消
如果 GitTree 丢弃或清除了文件,请按工具栏中的 撤消。在删除任何内容之前,它会在
refs/ogt/trash下保存恢复快照。搜索历史记录
使用提交图搜索来查找触及该文件的提交,然后打开该提交以读取其版本。
使用 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日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。