工作目錄下的文件有兩種狀態(tài):untrack(未跟蹤)和已跟蹤(tracked).
未跟蹤文件是指在上次快照中沒(méi)有記錄,在下次要提交的快照即暫緩區(qū)也沒(méi)有記錄的文件。
已跟蹤文件是指已被納入版本控制的文件,可以是已上傳到遠(yuǎn)程倉(cāng)庫(kù)的文件,可以是已修改但未暫緩區(qū)的文件,可以是放入暫緩區(qū)的文件。
從遠(yuǎn)程倉(cāng)庫(kù)克隆一個(gè)項(xiàng)目到本地,剛克隆下來(lái)時(shí),所有的文件都未被修改,是最初始的狀態(tài),因?yàn)槲募家言谶h(yuǎn)程倉(cāng)庫(kù),所以此時(shí)文件屬于已跟蹤狀態(tài)。
當(dāng)對(duì)某個(gè)文件做了修改之后,git將這些文件標(biāo)記為已修改的文件,然后放入暫緩區(qū),然后提交暫緩區(qū)的快照。
文件生命周期如下圖:

git status :用來(lái)查看文件狀態(tài)的命令
以一個(gè)例子來(lái)說(shuō)明:
首先,從遠(yuǎn)程克隆一個(gè)項(xiàng)目到本地:git clone ?url ? ? ? ?#git倉(cāng)庫(kù)地址
1.剛克隆下來(lái)時(shí),文件狀態(tài)查看?

此時(shí),暫緩區(qū)無(wú)文件,無(wú)文件被修改,所有文件都是已跟蹤狀態(tài)。
2.創(chuàng)建一個(gè)不存在的新文件test.txt,查看此時(shí)文件狀態(tài)

可見(jiàn),文件在untracked files下面,處于未被跟蹤的狀態(tài),紅色顯示。未跟蹤意味著之前的快照提交記錄中沒(méi)有這個(gè)文件,git不會(huì)自動(dòng)講從未跟蹤過(guò)的文件自動(dòng)添加到暫緩區(qū),需要手動(dòng)告訴它需要跟蹤這個(gè)文件。當(dāng)然,如果不需要跟蹤,就不需要告訴它。添加到暫緩區(qū)需要用到命令 git add ?文件

此時(shí),文件出現(xiàn)在changes to be committed,說(shuō)明是已被跟蹤狀態(tài)(屬于已修改未提交,處于暫緩區(qū)的情況),綠色顯示。這些文件將在下一次快照提交時(shí)提交。
3.處在暫緩區(qū)的文件提交
git commit是提交暫存區(qū)的文件快照。commit完之后查看文件狀態(tài)

文件全部已跟蹤(已提交到git存儲(chǔ)庫(kù),但未推送到倉(cāng)庫(kù)),但是根據(jù)提示還未推送,推送完成即可永久保留在遠(yuǎn)程倉(cāng)庫(kù)中。
4.文件被跟蹤過(guò),本次版本做了修改

該文件已被跟蹤,在歷史版本快照中有記錄,做了修改后,可見(jiàn)在 changes not staged for commit下面。說(shuō)明,文件內(nèi)容做了修改但是未存到暫存區(qū),屬于已跟蹤未放到暫存區(qū)(not staged)??墒褂胓it add將文件放到暫存區(qū)。所以,git add可以用來(lái)跟蹤新文件,也可以把已跟蹤文件放到暫存區(qū)。
5.文件推送到git倉(cāng)庫(kù)
git push origin master
推送完成后在遠(yuǎn)程倉(cāng)庫(kù)可看到新增的文件,git status 查看此時(shí)狀態(tài)

工作目錄非常干凈,暫緩區(qū)無(wú)文件,無(wú)文件被修改,所有文件都是已跟蹤狀態(tài)。