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

git add *命令作用是什么?执行后如何撤销并找回文件

git add * 命令的具体作用
  • 该命令的执行逻辑是先由当前Shell将*通配符展开为当前工作目录下所有非.开头的非隐藏文件/文件夹路径,再将这些路径对应的所有改动同步到Git暂存区(索引区),作为下次提交的预备内容。
  • 同步到暂存区的改动包含三类:新建文件的内容、已有文件的修改内容、已被手动删除的文件的删除操作——这也是很多人执行命令后误以为文件丢失的核心原因:如果执行命令前你手动删过工作区文件,git add *会把这个删除动作也记录到暂存区,看起来就像文件“消失”了。
  • 该命令本身不会直接删除磁盘上的任何实体文件,所有“文件丢失”的表象本质都是暂存区状态和工作区状态不匹配导致的。
  • 注意:*通配符默认不会匹配.git目录、以.开头的隐藏文件,以及已经被写入.gitignore规则、且从未被Git跟踪过的文件。
撤销git add *的操作方法

所有撤销操作默认都不会修改你工作区的实体文件,仅改动暂存区的状态,安全性有保障:

  • 全量撤销所有刚add到暂存区的内容,回到执行git add *之前的暂存状态,直接执行:
    git reset
    
  • 如果只需要撤销特定文件的add状态,保留其他文件的暂存记录,执行:
    git reset 目标文件路径
    

注意:不要随意加--hard参数执行git reset --hard,该参数会同步清空工作区的所有未提交改动,操作不当会真的造成文件丢失。

找回疑似丢失文件的可行方案

根据文件之前的状态,按优先级选对应操作即可:

  • 如果执行git status后看到丢失的文件被标记为deleted且已加入暂存区,说明文件内容已经存在暂存区里,直接执行以下命令就能把文件恢复回工作区:
    git restore 丢失的文件路径
    
  • 如果丢失的文件之前曾经被提交到Git历史中,哪怕当前暂存区和工作区都看不到,也可以通过操作记录找回:
    • 先执行git reflog列出所有本地仓库的操作历史,找到文件还存在时对应的提交哈希值
    • 执行以下命令从对应提交中恢复文件:
      git checkout 找到的提交哈希值 -- 丢失的文件路径
      
  • 如果丢失的文件从来没有被commit过,但曾经执行过git add操作把它加入过暂存区,可以用Git的底层对象回收机制兜底找回:
    • 执行git fsck --lost-found,Git会扫描所有没有被引用的文件对象,把它们导出到仓库根目录下的.git/lost-found/other路径中
    • 该路径下的文件以Git对象哈希值命名,逐个打开核对内容,就能找到你丢失的文件。注意:该方法仅在Git还没执行垃圾回收(默认30天以上未引用的对象才会被清理)时有效,发现文件丢失后尽量不要频繁执行会触发对象清理的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:24