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

Git revert命令相关:恢复删除文件及文件存储机制问询

为什么revert删除提交后文件会回到原位置

当你用git rm删掉文件并提交后,这个提交的核心变化是在仓库的目录树(Tree对象)里移除了该文件的条目。而git revert的作用是生成一个和目标提交完全反向的新提交——针对删除文件的提交,反向操作就是把被删掉的文件重新添加回来。

举个实际流程的例子:

  1. 删掉文件并提交:git rm test.txt && git commit -m "remove test.txt"
  2. 回滚这个删除提交:git revert <这个提交的哈希值>
  3. 执行完后你会发现test.txt重新出现在原位置,因为revert生成的新提交里,Git自动把该文件的内容重新加入到了仓库的目录树中。
Git存储已删除文件的核心逻辑

Git从来不会直接“删除”文件内容,它的存储机制是基于对象数据库的,所有内容都以不可变的对象形式存在,已删除文件的存储规则如下:

  • 文件内容存在Blob对象里:每个文件的内容都会被计算哈希值,生成一个唯一的Blob对象存在.git/objects目录下。只要这个Blob对象还有任何引用(比如旧提交、分支标签、操作日志),就会一直保留。
  • 删除操作只是移除目录树的引用:当你删除文件并提交时,新提交对应的Tree对象(记录目录结构)里会去掉该文件的条目,但包含该文件的旧Tree对象和旧提交依然存在,只要有地方能找到这些旧对象,文件内容就不会消失。
  • 只有垃圾回收会清理无引用对象:当某个Blob对象彻底没有任何引用(包括本地操作日志reflog里的记录也过期了),执行git gc命令时,Git才会把这个无主的Blob对象从数据库中彻底删除,释放磁盘空间。
  • reflog是救星:Git会记录本地所有分支的操作历史,哪怕你删掉了包含该文件的分支,reflog里依然能找到旧提交的记录,通过git reflog找到对应提交后,就能把文件恢复回来,默认reflog记录会保留90天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22