? ? 對(duì)于git的命令使用得雖多羽莺,但總是一知半解,知其然不知其所以然侨把,要能夠深入的理解這些命令犀变,必須得理解一些關(guān)鍵性的概念或者說是對(duì)象。正如要理解maven一樣秋柄,首先要理解pom(項(xiàng)目對(duì)象模型)這個(gè)概念获枝。
首先要理解工作區(qū),暫存區(qū)以及版本庫(kù)這三個(gè)概念骇笔,你本地電腦上的一個(gè)git項(xiàng)目就是由這三個(gè)對(duì)象組成的省店。
工作區(qū)就是在硬盤中打開一個(gè)git項(xiàng)目的文件夾,你看到這個(gè)目錄下的所有文件及子目錄都是工作區(qū)蜘拉,你在這個(gè)目錄下使用任何方式(除了git 命令)操作文件萨西,在git中都是對(duì)于工作區(qū)的操作。
版本庫(kù)其實(shí)也是你git項(xiàng)目目錄下的一個(gè)文件夾旭旭,不過它是一個(gè)隱藏的文件夾谎脯,具體細(xì)節(jié)不用太深究。這個(gè)版本庫(kù)就管理了這個(gè)git項(xiàng)目的各種歷史版本持寄,這個(gè)git項(xiàng)目的各種不同版本的詳細(xì)信息都記錄在版本庫(kù)里面
暫存區(qū)也是項(xiàng)目下的一個(gè)隱藏文件夾源梭,在邏輯上可以看作介于工作區(qū)和版本庫(kù)中間的一個(gè)區(qū)域,見名知意稍味,它就是一個(gè)暫時(shí)保存更改的一個(gè)區(qū)域废麻。
這個(gè)三個(gè)區(qū)域可以按照修改的頻繁度來排序,設(shè)計(jì)邏輯也可以這樣來理解模庐。工作區(qū)是直接操作的區(qū)域烛愧,也就是頻繁修改的區(qū)域。每一次修改不可能都生成一個(gè)版本掂碱,但是有需要保存某些修改怜姿,所以可以把一些修改保存到暫存區(qū)。當(dāng)暫存區(qū)累積了一些修改疼燥,需要把這些修改生成一個(gè)版本的時(shí)候沧卢,就把這些修改提交到版本庫(kù),然后就在版本庫(kù)中生成了這個(gè)項(xiàng)目的一個(gè)新版本醉者,包含了這次提交的修改但狭。這就是本地git的一個(gè)簡(jiǎn)單流程了。
理解了這三個(gè)對(duì)象之后撬即,對(duì)git的很多命令的用法也就能夠理解了立磁。比如git diff 命令:
git diff 是工作區(qū)與暫存區(qū)的差異比較
git diff --cached 是暫存區(qū)和版本庫(kù)中HEAD(版本庫(kù)的一個(gè)指針變量,指向某一次提交)指向的一個(gè)提交的版本比較
git diff HEAD 是工作區(qū)與版本庫(kù)HEAD指向的一個(gè)提交的版本比較
還有其他的git命令無非就是這三個(gè)區(qū)域的交互搞莺。