工作區>>>>暫存區>>>>倉庫
初始化完成后,三個區域都是空的,這個時候記錄就算是初始化了,開始記錄這三者差異。
在工作區創建一個新的文件test.txt,先add到暫存區,這時可以使用git diff來查看工作區和暫存區的差異(操作1),當然,這里肯定是沒有差異的!記住,這里是比較差異,不存在哪個區的數據沒有了或空了,因為數據只有一份。
然后,你在工作區對test.txt進行修改(並沒有將暫存區提交到倉庫),修改保存后,同樣可以使用git diff來查看工作區和暫存區的差異(操作2),當然,這里肯定是有差異的!
在你並沒有再次進行git add test.txt操作前,使用git commit將暫存區(第一次add的test.txt版本)提交到倉庫,這時倉庫就有了第一個版本的test.txt文件。
這時你同樣可以使用git diff來查看工作區和暫存區的差異,和操作2的結果是不是一樣的?對,是一樣的。因為你並沒有git add,工作區和暫存區數據存在差異。
這時你使用git diff --cached來查看暫存區和倉庫的差異(操作3),當然,這里肯定是沒有差異的!同樣是因為你並沒有再一次git add。
好了,你開始執行第二次git add,執行完后,再試試git diff操作,是不是發現沒有差異了?可以證明這里確實比較的是工作區和暫存區的數據差異了吧!
好,再試試git diff --cached操作,是不是發現有差異了?也證明了這里確實比較的是暫存區和倉庫的數據差異。
另外,我還想說一下git add的反向命令git checkout,就是將工作區提交到暫存區的數據撤銷掉。以及git commit的反向命令git reset HEAD,就是將提交到暫存區的數據以倉庫數據為基准撤銷暫存。