如何恢复Git未提交文件?误操作commit推送后丢失新增文件怎么办
Git新增文件丢失找回方案
你本次操作出现文件丢失的核心原因是git commit -a命令存在作用范围限制:该命令仅会自动暂存已被Git追踪的文件的修改、删除变更,从未执行过git add的新增未追踪文件不会被纳入本次提交,因此你推送到远程的提交中不包含这部分新文件。
以下是可执行的排查恢复步骤:
- 步骤1:扫描Git悬空对象找回内容
执行悬空对象检索命令:git fsck --lost-found
命令执行后,所有未被提交关联的文件内容(blob对象)会被自动导出到本地仓库的.git/lost-found/other/目录下,你可直接进入该目录逐一查看文件内容,匹配丢失的核心代码。 - 步骤2:批量检索悬空对象内容定位文件
如果你记得丢失文件的内容关键词,可执行以下命令遍历所有悬空文件的内容,快速定位目标文件:
找到对应文件后,执行for blob in $(git fsck --lost-found | grep 'dangling blob' | awk '{print $3}'); do echo -e "\n=== 哈希值: $blob ==="; git cat-file -p $blob; donegit cat-file -p [文件对应哈希值] > [你要恢复的文件路径]即可完整恢复文件内容。 - 步骤3:通过reflog恢复提交前的本地状态
如果你在编写过程中曾经执行过git add操作添加过新文件,可通过Git操作日志恢复当时的状态:- 执行
git reflog查看本地所有Git操作的历史记录,找到你执行git commit -a之前的操作对应的哈希值 - 执行
git checkout [对应哈希值] -- .即可恢复当时的本地工作区/暂存区内容,包含你之前添加过的新文件。
- 执行
- 步骤4:排查编辑器/系统备份
如果上述Git层面的操作均未找到文件,说明你从未将新文件加入过Git暂存区,此时可检查操作系统回收站,或你使用的代码编辑器的本地备份功能(如VS Code的自动备份、JetBrains系列IDE的本地历史记录),通常编辑器会默认保留近期的文件修改备份。
后续操作提示:新增文件首次提交前必须手动执行
git add [文件路径],git commit -a无法覆盖未追踪的新增文件,避免同类问题发生。
内容的提问来源于stack exchange,提问作者G.Artun
相关产品推荐
相关产品推荐

