在 Git 的世界里,文件的修改并不会自动被记录。这就好比你在准备一份演讲稿,你可以在纸上随意涂改(工作区的修改),但只有当你把确定的内容誊写到正式的稿件上(暂存区),演讲才算确定了内容。
git add 命令就是那个“誊写”的过程。它将工作区的文件修改放入暂存区,告诉 Git:“请关注这些文件的变化,我稍后要把它们存入版本库。”
当你新建了一个文件(例如 README.md)时,它是处于“未跟踪”状态的。你需要显式地告诉 Git 开始管理它。
命令格式:
git add <文件名>
操作示例:
假设你在项目目录下新建了一个 README.md 文件:
git add README.md
执行该命令后,终端通常不会输出任何提示信息(Unix 风格:没有消息就是好消息)。此时再次使用 git status 查看,你会发现文件状态已变为 Changes to be committed(已暂存),通常显示为绿色。
git add 不仅仅是添加新文件,它还是一个“多功能”命令。如果一个文件已经被 Git 跟踪,但你在本地修改了它,Git 会检测到差异。
此时,文件处于“未暂存”状态。你需要再次使用 git add 命令,将这次修改添加到暂存区。
# 修改了 index.html 后
git add index.html
注意:如果你修改了一个文件,执行了 git add 后又再次修改了它,你需要再次运行 git add 将最新的修改加入暂存区。Git 暂存区保存的是你执行 add 命令那一刻的文件快照。
在实际开发中,我们往往一次性修改了多个文件,逐个输入文件名会非常繁琐。Git 提供了便捷的批量操作方式。
添加当前目录下所有变更:
这是最常用的命令,它会将当前目录及子目录下所有的新建、修改操作添加到暂存区。
git add .
最佳实践:建议养成使用 git add . 的习惯,但在执行前务必先执行 git status 确认一下变更内容,避免误提交临时文件或敏感信息。
添加所有已跟踪文件的修改:
如果你只想提交修改过的文件,不想添加新建的未跟踪文件(这在某些调试场景下很有用),可以使用:
git add -u
如果你想更精细地控制哪些修改需要暂存(例如同一个文件里有两处修改,你只想提交其中一处),可以使用交互模式:
git add -p
Git 会逐块展示修改内容,并询问你是否暂存。这在拆分大的代码改动时非常有用。
很多初学者会问:“为什么 Git 需要 add 和 commit 两步?直接提交所有修改不好吗?”
暂存区的设计体现了 Git 的灵活性:
| 命令 | 作用 |
|---|---|
git add <file> |
添加指定文件到暂存区 |
git add . |
添加当前目录下所有变更(最常用) |
git add -u |
添加所有已跟踪文件的修改 |