Git 中文手册

git checkout -- 文件 恢复误改误删的内容

2026-09-06 约 3 分钟阅读

文件被改坏了、或误删了还没提交的文件,想恢复成最近一次提交的版本?git checkout -- 文件 和 git restore 帮你一键还原。本文讲清用法与风险。

场景:某行代码被你改得一团糟,或者不小心删了一个已提交过的文件,想一键恢复到「最近一次提交」的干净版本。这正是 git checkout -- 文件 的用途。

恢复工作区的改动

git checkout -- 文件.txt

这会用最近一次提交(HEAD) 里的版本覆盖工作区,把文件还原成干净状态。

恢复多个文件或整个目录

git checkout -- 文件1.txt 文件2.js
git checkout -- src/          # 恢复整个目录

新版命令:git restore(推荐)

Git 2.23+ 引入了更语义化的 restore,和 checkout 文件恢复等效,新手更易懂:

git restore 文件.txt          # 恢复工作区
git restore .                 # 恢复全部

重要:恢复的是「哪个版本」

  • 默认 git checkout -- 文件 / git restore 文件:恢复自 暂存区(若已 add)或 HEAD(若未 add)
  • 想明确回到某次提交:git checkout HEAD~1 -- 文件

误删了文件怎么办

如果文件之前提交过,误删后可直接恢复:

git checkout -- 误删的文件.txt   # 或 git restore 误删的文件.txt

但注意:从未 add 过的新文件(未跟踪)不在版本库里,checkout/restore 无法恢复,需靠编辑器历史或回收站。

风险提醒(务必看)

git checkout -- 文件 / git restore 文件永久丢弃该文件当前工作区的改动,不可用 reflog 找回(reflog 只保护提交,不保护未提交改动)。用之前:

  1. 确认这个文件没有想保留的修改
  2. 拿不准就先把文件备份:cp 文件.txt 文件.txt.bak

常见问题

  • 只想丢弃整个仓库的所有未提交改动:谨慎,git reset --hard HEAD 会连暂存一起清空。
  • 提示 cannot checkout:可能文件被 Git 认为是重命名或冲突状态,先 git status 查看状态。
  • restore 提示没这个命令:Git 版本过低,用旧命令 git checkout -- 文件

一句话速记

git checkout -- 文件 / git restore 文件 把已提交的文件恢复成干净版本,但会丢当前改动、且救不了未跟踪新文件。

?

常见问题 FAQ

git checkout -- 文件 会把我最近做的修改都丢掉吗?
会。它用最近一次提交(或暂存区)的内容覆盖工作区,当前工作区对那个文件的改动会永久丢失且不可找回。用前确认没有想保留的改动。
git checkout -- 和 git restore 有区别吗?
基本等效。git restore 是 Git 2.23+ 引入的更语义化命令,git restore 文件 等同于 git checkout -- 文件。新项目推荐用 restore。
误删了一个还没提交的新文件,能恢复吗?
如果新文件从未 git add 过(未跟踪),checkout 无法恢复,因为它不在版本库里。应立即用编辑器/回收站找回,或养成及时 add 的习惯。
想恢复暂存区里已经 add 的改动到提交版本怎么操作?
git restore --staged 文件 会取消暂存(从暂存区退回工作区),但不改文件内容;若要连内容也还原成提交版本,用 git checkout HEAD -- 文件。