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