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

为什么‘git add *’无法追踪已删除文件及特定非点开头.sh文件?

为什么git add *无法追踪已删除的文件?

这个问题的核心其实不在Git本身,而是你的shell(比如bash、zsh这类命令行环境)对*通配符的处理逻辑,我给你拆解清楚:

  • 当你输入git add *时,shell会先于Git执行通配符展开:它会把*替换成当前目录下实际存在的所有非隐藏文件/文件夹列表。如果那个.sh文件已经被你从文件系统中删除了,shell在扫描时根本找不到它,自然不会把它加入到传给Git的参数里。Git收到的只是当前存在的文件,当然不会处理已删除的那个文件。

  • 而当你明确指定文件名(比如git add test.sh)时,情况就不一样了:Git会直接根据你给出的文件名去检查它在仓库中的状态——如果这个文件之前已经被Git追踪过,现在文件系统里没了,Git就会识别到“这个追踪过的文件被删除了”,进而把删除操作记录到暂存区。

如果你想一次性处理所有变更(包括新增、修改、删除的文件),不用手动指定每个文件,可以用git add --all(简写git add -A),这个命令会让Git自己扫描整个仓库的状态变化,完全绕过shell的通配符展开,就能自动捕获到已删除的文件了。

你也可以用echo *命令验证一下:在删除文件后执行这个命令,输出的列表里肯定没有那个已删除的.sh文件,这就能直观看到shell展开的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:34:05