## git add 添加文件到缓存
在 Git 中,在提交你修改的文件之前,你需要把它们添加到缓存。如果该文件是新创建的,你可以执行 `git add` 将该文件添加到缓存,但是,即使该文件已经被追踪了 —— 也就是说,曾经提交过了 —— 你仍然需要执行 git add 将新更改的文件添加到缓存去。让我们看几个例子:
回到我们的 Hello World 示例,初始化该项目之后,我们就要用 `git add` 将我们的文件添加进去了。 我们可以用 `git status` 看看我们的项目的当前状态。
~~~
$ git status -s
?? README
?? hello.rb
~~~
我们有俩尚未被追踪的文件,得添加一下。
~~~
$ git add README hello.rb
~~~
现在我们再执行 `git status`,就可以看到这俩文件已经加上去了。
~~~
$ git status -s
A README
A hello.rb
~~~
新项目中,添加所有文件很普遍,可以在当前工作目录执行命令:`git add .`。 因为 Git 会递归地将你执行命令时所在的目录中的所有文件添加上去,所以如果你将当前的工作目录作为参数, 它就会追踪那儿的所有文件了。如此,`git add .` 就和 `git add README hello.rb` 有一样的效果。 此外,效果一致的还有 `git add *`,不过那只是因为我们这还木有子目录,不需要递归地添加新文件。
好了,现在我们改个文件,再跑一下 `git status`,有点古怪。
~~~
$ vim README
$ git status -s
AM README
A hello.rb
~~~
“AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。这意味着如果我们现在提交快照, 我们记录的将是上次跑 `git add` 的时候的文件版本,而不是现在在磁盘中的这个。 Git 并不认为磁盘中的文件与你想快照的文件必须是一致的 —— (如果你需要它们一致,)得用 `git add` 命令告诉它。
> **一言以蔽之**, 当你要将你的修改包含在即将提交的快照里的时候,执行 `git add`。 任何你没有添加的改动都不会被包含在内 —— 这意味着你可以比绝大多数其他源代码版本控制系统更精确地归置你的快照。
请查看《Pro Git》中 `git add` 的 “-p” 参数,以了解更多关于提交文件的灵活性的例子。