Git的使用教程(四)工作區(qū)和暫存區(qū)
?對于Git,相信大家都有一個初步的了解,再繼續(xù)深入學(xué)習(xí)Git之前,我們有必要先了解兩個名詞,工作區(qū)和暫存區(qū)。其實(shí)在學(xué)習(xí)Git命令之前,我們首先應(yīng)該理解工作區(qū)和暫存區(qū)的概念,這樣才能更好的明白Git的操作到底做了些什么事情。之所以沒有提前說明,是因?yàn)樾【幱X得這些概念提前灌輸會讓初學(xué)者不知所云,失去學(xué)習(xí)Git的興趣。工作區(qū)還比較容易理解,但是暫存區(qū)就沒有那么容易理解了,即便是現(xiàn)在,對Git有了一定認(rèn)識,也不敢保證很好的消化暫存區(qū)的概念。好了,廢話不多說了,接下來我們就來認(rèn)識下工作區(qū)和暫存區(qū)。
? ? 工作區(qū)就是我們程序放置的文件夾,也就是當(dāng)初我們git init初始化的那個目錄。在小編這里e:/git文件夾就是一個工作區(qū)。但是在工作區(qū)有一個不速之客,那就是.git文件夾,它不屬于工作區(qū),我們稱之為版本庫。相比于工作區(qū),版本庫的內(nèi)容就豐富了許多,當(dāng)然這里先不研究其他的,只說下今天的另一個重點(diǎn),暫存區(qū)。
? ??
? ? 暫存區(qū),又被稱為stage或index,是Git的特色,也是Git最重要的概念之一,如果你也閱讀過其他關(guān)于Git暫存區(qū)的文章,相信你會發(fā)現(xiàn)它們都在重復(fù)的訴說著同樣一件事,那就是暫存區(qū)很重要。我們先來看看關(guān)于工作區(qū)和暫存區(qū)的一張圖(摘自網(wǎng)上)
這張圖很形象的說明了工作區(qū),版本庫和暫存區(qū)之間的關(guān)系,圖中有我們熟悉的add,commit和reset的命令,也有陌生的checkout和rm命令,還有一些新的概念,例如指針(HEAD),分支(master),它們在以后的教程中都會出現(xiàn),暫時可以不用管它。
? ? 還記得首次使用git命令的嗎,一共介紹了三個命令git init,git add和git commit。其中g(shù)it add和git commit就是跟暫存區(qū)密切相關(guān)的。當(dāng)初不是不清楚為什么git add之后還要使用git commit嗎,這就是原因,因?yàn)間it add的時候并沒有形成我們需要的一個版本,只是添加到了暫存區(qū),想要形成一個版本,還需要把暫存區(qū)中的內(nèi)容提交到分支上,才能最終形成我們需要的版本,這時候就借助了git commit。
? ? 這時候很多朋友可能會有疑問,為什么要多此一舉,非要經(jīng)過暫存區(qū),直接形成一個版本不好嗎?在回答這個問題前,我們先來看個現(xiàn)實(shí)中的場景。對于網(wǎng)購,相信大家都不陌生,網(wǎng)購的流程是什么呢?選擇商品——>加入購物車——>結(jié)賬。如果沒有購物車呢?購物流程就變?yōu)榱诉x擇商品——>結(jié)賬,如果購買的商品多了,豈不是要結(jié)賬很多次,想想就覺得麻煩,瞬間覺得有了購物車是多么美好的一件事。除了這個優(yōu)點(diǎn),購物車還有一個優(yōu)點(diǎn),那就是給你提供二次選擇的機(jī)會。怎么說呢,我們?yōu)g覽商品的時候可能遇到很多喜歡的商品,我們都會一股腦的加入了購物車,結(jié)果結(jié)賬的時候才發(fā)現(xiàn)原來荷包不堪重負(fù),此時我們便會進(jìn)行二次選擇,挑選出其中需要優(yōu)先購買的商品。如果不存在購物車的話,選擇一件買一件,或許遇到更喜歡的商品的時候已經(jīng)沒有money,此時你可能便會后悔為什么剛才買了那么多“沒用”的東西。
? ? 此時我們再來看Git,是不是也是類似的流程呢,新增/修改文件——>加入暫存區(qū)——>形成新版本。暫存區(qū)就充當(dāng)了購物車的角色,有了暫存區(qū),我們可以把多次修改合并為一次提交;有了暫存區(qū),當(dāng)我們不滿意此次修改的時候,還可以進(jìn)行撤銷操作(接下來的文章會講,此處不再單獨(dú)舉例),直到我們滿意再提交。
? ??多次修改一次提交
? ? 在工作區(qū)干凈的基礎(chǔ)上,修改了已存在的README.md和新增一個new.txt,此時使用git status查看狀態(tài)如下
然后分別對README.md和new.txt使用git add,把它們加入到暫存區(qū)。然后使用git commit進(jìn)行提交,此時在查看工作區(qū),干凈的哦。多次修改,一次提交,實(shí)現(xiàn)。
? ??
? ? 有了購物車當(dāng)引子,對于Git的暫存區(qū)我們是不是又有了新的認(rèn)識呢。當(dāng)然現(xiàn)在的我們對于暫存區(qū)的認(rèn)知還是停留于表層,但是小編并沒有打算深究,畢竟我們只是使用者,理解了這個已經(jīng)足夠了,至于那些更深層次的東西,就留給那些專家們研究吧。





