? ? 對于git的命令使用得雖多,但總是一知半解,知其然不知其所以然,要能夠深入的理解這些命令,必須得理解一些關(guān)鍵性的概念或者說是對象。正如要理解maven一樣,首先要理解pom(項目對象模型)這個概念。
首先要理解工作區(qū),暫存區(qū)以及版本庫這三個概念,你本地電腦上的一個git項目就是由這三個對象組成的。
工作區(qū)就是在硬盤中打開一個git項目的文件夾,你看到這個目錄下的所有文件及子目錄都是工作區(qū),你在這個目錄下使用任何方式(除了git 命令)操作文件,在git中都是對于工作區(qū)的操作。
版本庫其實也是你git項目目錄下的一個文件夾,不過它是一個隱藏的文件夾,具體細節(jié)不用太深究。這個版本庫就管理了這個git項目的各種歷史版本,這個git項目的各種不同版本的詳細信息都記錄在版本庫里面
暫存區(qū)也是項目下的一個隱藏文件夾,在邏輯上可以看作介于工作區(qū)和版本庫中間的一個區(qū)域,見名知意,它就是一個暫時保存更改的一個區(qū)域。
這個三個區(qū)域可以按照修改的頻繁度來排序,設(shè)計邏輯也可以這樣來理解。工作區(qū)是直接操作的區(qū)域,也就是頻繁修改的區(qū)域。每一次修改不可能都生成一個版本,但是有需要保存某些修改,所以可以把一些修改保存到暫存區(qū)。當暫存區(qū)累積了一些修改,需要把這些修改生成一個版本的時候,就把這些修改提交到版本庫,然后就在版本庫中生成了這個項目的一個新版本,包含了這次提交的修改。這就是本地git的一個簡單流程了。
理解了這三個對象之后,對git的很多命令的用法也就能夠理解了。比如git diff 命令:
git diff 是工作區(qū)與暫存區(qū)的差異比較
git diff --cached 是暫存區(qū)和版本庫中HEAD(版本庫的一個指針變量,指向某一次提交)指向的一個提交的版本比較
git diff HEAD 是工作區(qū)與版本庫HEAD指向的一個提交的版本比較
還有其他的git命令無非就是這三個區(qū)域的交互。