考:http://blog.csdn.net/wirelessqa/article/details/19548057
按照文件的存放位置分:
在你自建的Git本地倉庫中,有三個區域:本地目錄、暫存區、HEAD。
-
工作目錄:也叫work tree, 就是受Git控制的文件夾,所有被跟蹤記錄的文件都包括在其中;
-
暫存區(index或者stage):類似一個緩存區域,臨時保存你做的改動;
-
HEAD:指向最近一次提交后的結果。
按照文件的狀態分:
工作目錄下面的所有文件都不外乎這兩種狀態:已跟蹤或未跟蹤
-
未跟蹤的文件的改動不受到Git的版本控制。
-
已跟蹤的文件,即被納入版本控制的文件,又分為未修改(unmodified)、已修改(modified)、已暫存(staged)三種狀態。
-
當在工作目錄中新加入一個文件時,它處於未跟蹤狀態,這表示其沒有納入Git的版本控制。
-
通過 git add 命令可以將其加入跟蹤,並同時放入暫存區。
-
一個已經被跟蹤的文件,如果沒有做過新的修改,就是未修改狀態。
-
一旦對其做了改動,就變成了已修改狀態。通過 git add 命令可以將已修改的文件放入暫存區。
-
初次克隆某個倉庫時,工作目錄中所有文件都是已跟蹤且未修改的狀態。
-
git commit 命令會將暫存區中的文件提交至HEAD所指向的分支。當被commit之后,暫存區的文件將回到未修改狀態。
對於如下圖所示的git status
最上面的兩行綠色,表示已經通過git add 將new file和修改放入暫存區了.
下面的一行紅色,表示修改過了,但是沒有git add提交修改,也就不會放入暫存區
最下面兩行,untracked,沒有加入版本控制.
所以git add和git rm是打通工作目錄和暫存區的橋梁.
其實git add應該是將untracked和modified連接到staged,貌似上圖不對.
PS:對於暫存區,也叫stage或者index或者cached.