git add -A 与 git add . 有什么区别

Git 2.0 之后两者都会暂存新增、修改和删除,区别只在范围:git add -A 作用于整个仓库(无论在哪个子目录执行),git add . 只作用于当前目录及其子目录。老版本 Git 1.x 中 git add . 不暂存删除。

最佳实践
Git 分支协作与合并示意

Git 2.0 起,两者暂存的变更类型完全一样(新增、修改、删除都包含),唯一区别是作用范围:git add -A(即 --all)覆盖整个仓库,你在任何子目录执行都会暂存全仓的改动;git add . 只覆盖当前目录及其子目录。

对比表

命令 范围 暂存删除?
git add -A 整个仓库 是
git add . 当前目录树 是(Git 2.0+)
git add -u 整个仓库 是,但只针对已跟踪文件(不添加新文件)

历史包袱

Git 1.x 时代 git add . 不暂存删除,git add -A 才暂存——很多老教程的差异说法来自那个年代。2.0 之后这个差异被抹平,只剩范围之别。如果你在维护古董服务器上的 Git 1.x,记住那时 -A 和 . 确实不同。

实用建议

git add -A          # 全仓改动一把梭(提交前 git status 确认)
git add .           # 在子目录里只想暂存本目录改动时
git add src/ tests/ # 精确指定路径,最安全
git add -p          # 要逐块挑选时用交互模式

提交前养成 git status + git diff --cached 检查暂存区的习惯,比纠结用哪个命令更防事故。

常见问题(FAQ)

Q:git add * 和 git add . 一样吗?

不一样。* 是 shell 通配符展开,不匹配点开头文件且对删除处理不同;. 是 Git 的路径参数。别用 *。

Q:怎么只暂存修改和删除、不加新文件?

git add -u(--update),只处理已被 Git 跟踪的文件。

Q:误 add 了不想提交的文件怎么撤?

git restore --staged <文件>(老语法 git reset HEAD <文件>),改动留在工作区不丢。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台