You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何撤销git checkout filename?误执行git checkout .后如何恢复未提交修改?

恢复 git checkout . 撤销的未提交修改 & 撤销 git checkout filename 操作

先给你分情况说明,能不能恢复完全取决于你的修改有没有被 Git 记录过:

一、恢复 git checkout . 导致丢失的修改

git checkout . 会把当前目录下所有文件的工作区状态,重置到**暂存区或 HEAD(最近一次提交)**的版本——简单说就是把你没提交的修改直接覆盖了。能不能找回来分两种情况:

1. 你的修改从未执行过 git add

这种情况下,Git 根本没把你的修改存入它的数据库,相当于系统直接覆盖了文件内容。这时候 Git 帮不了你,只能依赖系统层面的恢复工具:

  • Windows:可以用 Recuva、Disk Drill 这类文件恢复软件,扫描磁盘找回被覆盖的文件;如果开了系统还原,也可以尝试还原到之前的系统快照。
  • macOS:如果你开了 Time Machine,直接从时间机器里恢复对应文件;或者用 Disk Drill 这类工具。
  • Linux:可以试试 testdisk 或者 photorec 这类开源恢复工具,不过覆盖后的文件恢复成功率不高,得看运气。

2. 你的修改曾经执行过 git add(哪怕之后又修改过但没再 add)

如果之前用 git add 把修改暂存过,那 Git 其实在本地数据库里保存了这个暂存版本。你可以这么找:

  1. 运行 git fsck --lost-found,这个命令会扫描 Git 数据库里的“丢失”对象,把它们放到 .git/lost-found/other 目录下。
  2. 进入 .git/lost-found/other,用 cat 或者文本编辑器查看每个文件的内容,找到你丢失的修改。
  3. 把找到的文件内容复制回原文件即可。

另外,你也可以用 git reflog 查看 HEAD 的操作记录,找到 git checkout . 之前的那个状态,然后用 git restore --source=HEAD@{1} .(Git 2.23+ 版本支持)来尝试恢复,但这个方法只对已经被 Git 追踪的文件有效。

二、撤销 git checkout filename 操作

git checkout filename 本质上和上面的情况类似,都是用暂存区或 HEAD 的版本覆盖了工作区的修改。恢复方法同样分两种:

1. 修改未执行过 git add

和上面一样,Git 没记录这个修改,只能靠系统文件恢复工具尝试找回。

2. 修改执行过 git add

  • 如果你用的是 Git 2.23 及以上版本,直接运行:
    git restore --source=HEAD@{1} filename
    
    这里的 HEAD@{1} 代表你执行 git checkout filename 之前的 HEAD 状态,你可以先用 git reflog 确认这个状态的正确性。
  • 如果是旧版本 Git,用:
    git checkout HEAD@{1} -- filename
    
    这个命令会把之前状态下的 filename 内容恢复到工作区。

最后提醒一句:以后操作 Git 前,最好先用 git status 确认当前状态,不确定的命令可以先加 --dry-run 参数看效果,避免误操作~

内容的提问来源于stack exchange,提问作者mana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:22:35