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

如何通过Git恢复未提交且已被清空的编辑文件内容?

用Git找回未提交就被清空的编辑内容

现有文件:

a.adoc
b.adoc
c.adoc
e.adoc

未知原因导致AsciidocFX 1.8.6清空了这些已编辑文件的内容,且无法通过Ctrl+Z撤销。当前文件已变为空白且已保存,但尚未提交至Git。

执行git status命令显示:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified: a.adoc  
    modified: b.adoc
    modified: c.adoc
    modified: d.adoc
    modified: e.adoc

执行git diff a.adoc可查看与最新提交版本相比被删除的内容,但当前空白文件与上一提交版本差异较大。

场景说明

  • 原始文件已提交
  • 文件被编辑保存但未提交,随后内容被删除
  • 当前文件为空白

需求:找回场景中被删除的编辑内容(类似Ctrl+Z的效果)


解决方案

方法1:从Git对象库恢复(最可靠)

Git会自动缓存文件修改的快照,哪怕没执行git add,也能从对象库找回:

  1. 执行命令:git fsck --lost-found
    该命令会扫描Git仓库,把所有未被引用的对象存入.git/lost-found/other目录,每个对象以哈希值命名。
  2. 查看目录下的文件内容,找到对应你编辑过的内容:
    cat .git/lost-found/other/<哈希值>
    
  3. 找到目标内容后,复制到对应的空白.adoc文件即可。

方法2:通过git diff提取内容

如果git diff能显示出被删除的编辑内容,可直接提取:

  1. 执行git diff <文件名>,比如git diff a.adoc,输出中以-开头的行就是你之前编辑的内容(注意排除文件开头的---/+++行)。
  2. 把这些行去掉前缀-,复制到空白文件中即可。

方法3:利用暂存区恢复(仅适用于曾执行过git add的情况)

如果之前把编辑内容暂存过(执行过git add),可以这样操作:

  1. 先恢复暂存区的内容到工作区:
    git restore --staged <文件名>
    git restore <文件名>
    
    旧版本Git可使用:
    git checkout -- <文件名>
    
    这个方法仅在你曾暂存过编辑内容时有效,未执行过git add则无法使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:14:53