## git add 添加文件到緩存
在 Git 中,在提交你修改的文件之前,你需要把它們添加到緩存。如果該文件是新創(chuàng)建的,你可以執(zhí)行?`git add`?將該文件添加到緩存,但是,即使該文件已經(jīng)被追蹤了 —— 也就是說,曾經(jīng)提交過了 —— 你仍然需要執(zhí)行?git add 將新更改的文件添加到緩存去。讓我們看幾個(gè)例子:
回到我們的 Hello World 示例,初始化該項(xiàng)目之后,我們就要用?`git add`?將我們的文件添加進(jìn)去了。 我們可以用?`git status`?看看我們的項(xiàng)目的當(dāng)前狀態(tài)。
~~~
$ git status -s
?? README
?? hello.rb
~~~
我們有倆尚未被追蹤的文件,得添加一下。
~~~
$ git add README hello.rb
~~~
現(xiàn)在我們?cè)賵?zhí)行?`git status`,就可以看到這倆文件已經(jīng)加上去了。
~~~
$ git status -s
A README
A hello.rb
~~~
新項(xiàng)目中,添加所有文件很普遍,可以在當(dāng)前工作目錄執(zhí)行命令:`git add .`。 因?yàn)?Git 會(huì)遞歸地將你執(zhí)行命令時(shí)所在的目錄中的所有文件添加上去,所以如果你將當(dāng)前的工作目錄作為參數(shù), 它就會(huì)追蹤那兒的所有文件了。如此,`git add .`?就和?`git add README hello.rb`?有一樣的效果。 此外,效果一致的還有?`git add *`,不過那只是因?yàn)槲覀冞@還木有子目錄,不需要遞歸地添加新文件。
好了,現(xiàn)在我們改個(gè)文件,再跑一下?`git status`,有點(diǎn)古怪。
~~~
$ vim README
$ git status -s
AM README
A hello.rb
~~~
“AM” 狀態(tài)的意思是,這個(gè)文件在我們將它添加到緩存之后又有改動(dòng)。這意味著如果我們現(xiàn)在提交快照, 我們記錄的將是上次跑?`git add`?的時(shí)候的文件版本,而不是現(xiàn)在在磁盤中的這個(gè)。 Git 并不認(rèn)為磁盤中的文件與你想快照的文件必須是一致的 —— (如果你需要它們一致,)得用?`git add`?命令告訴它。
> **一言以蔽之**, 當(dāng)你要將你的修改包含在即將提交的快照里的時(shí)候,執(zhí)行?`git add`。 任何你沒有添加的改動(dòng)都不會(huì)被包含在內(nèi) —— 這意味著你可以比絕大多數(shù)其他源代碼版本控制系統(tǒng)更精確地歸置你的快照。
請(qǐng)查看《Pro Git》中?`git add`?的 “-p” 參數(shù),以了解更多關(guān)于提交文件的靈活性的例子。
