所謂 add
,就是 add file into staged area
。
新文件
add
是一個(gè)比較重要的操作,假設(shè)有一個(gè)空目錄,此時(shí)里面沒(méi)有任何文件。
我們新建一個(gè)文件,這個(gè)文件就是處于 untrack
狀態(tài)的。
修改這個(gè)文件,依然是處于 untrack
狀態(tài)。
使用 add
操作,將新文件添加到暫存區(qū)(staged
),并且將文件標(biāo)記為 track
,這是 add
比較清晰的兩個(gè)作用。
使用 commit
操作,生成快照,同時(shí) clean
暫存區(qū),初始化一切。
舊文件
另外一種情況,假設(shè)已經(jīng)有了舊文件,文件處于 track
狀態(tài)。
此時(shí)修改文件,如果使用 status
命令查看,會(huì)提示 Changes not staged for commit
,大意就是此時(shí)已經(jīng)更新文件了,但是更新的內(nèi)容還沒(méi)有暫存起來(lái),提示使用 add
操作進(jìn)行暫存。
按照提示使用 add
操作后,使用 status
命令查看,會(huì)發(fā)現(xiàn)處于已暫存狀態(tài)。Changes to be committed
,如果此時(shí)提交,那么該文件此時(shí)此刻的版本將被留存在歷史記錄中。
與 commit
搭配使用
如果發(fā)現(xiàn)不斷的 add
、commit
比較麻煩,可以使用 commit
命令 加-a
參數(shù),Git
會(huì)自動(dòng)更新已經(jīng)跟蹤過(guò)的文件,更新暫存區(qū)。
但這里有個(gè)地方需要留意,-a
參數(shù)并不會(huì)更新未跟蹤的文件。
總結(jié)
關(guān)于 add
,最值得留意的就是一旦修改文件,必須重新暫存,否則生成快照( commit
)的依然是上次 add 時(shí)的狀態(tài),快照只從暫存區(qū)來(lái)。
總結(jié)起來(lái),對(duì)于新文件,add
會(huì)跟蹤文件,同時(shí)將文件存入暫存區(qū),如果是舊文件,可以按照本地文件更新暫存區(qū)的文件。
除了上面提到的,還有一種常見(jiàn)的情況,當(dāng)文件出現(xiàn)沖突時(shí),經(jīng)常需要人為解決沖突,在修改之后,可以使用 add
操作將有沖突的文件標(biāo)記為已經(jīng)解決狀態(tài)。