For investors

股價(jià):

5.36 美元 %
認(rèn)識(shí)達(dá)內(nèi)從這里開(kāi)始

認(rèn)真做教育 專(zhuān)心促就業(yè)

圖解Git

GIT是非常優(yōu)秀的版本控制工具,但是苦于git那晦澀難懂的man pages,還有眾多的命令選項(xiàng)和怪異的用法,git有點(diǎn)難學(xué)。這篇文章分享我學(xué)習(xí)過(guò)程中收藏的一些好圖,并圍繞這些圖講講我對(duì)git的理解,希望對(duì)大家有所幫助。

GIT工作流程

了解git,首先要弄清楚對(duì)象在被git管理過(guò)程中所處的4個(gè)階段,分別是:工作目錄、index(又稱(chēng)為暫存區(qū))、本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)。從時(shí)間先后來(lái)講,工作目錄的內(nèi)容是你當(dāng)前看到的,也是最新的;index區(qū)標(biāo)記了你當(dāng)前工作目錄中,哪些內(nèi)容是被git管理的;而本地倉(cāng)庫(kù)保存了對(duì)象被提交過(guò)的各個(gè)版本,比起工作目錄和暫存區(qū)的內(nèi)容,它要更舊一些;遠(yuǎn)程倉(cāng)庫(kù)是本地倉(cāng)庫(kù)的異地備份,遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容可能被分布在多個(gè)地點(diǎn)的處于協(xié)作關(guān)系的本地倉(cāng)庫(kù)修改,因此它可能與本地倉(cāng)庫(kù)同步,也可能不同步,但是它的內(nèi)容是最舊的。任何對(duì)象都是在工作目錄中誕生和被修改;任何修改都是從進(jìn)入index區(qū)才開(kāi)始被版本控制;只有把修改提交到本地倉(cāng)庫(kù),該修改才能在倉(cāng)庫(kù)中留下痕跡;而要與協(xié)作者分享本地的修改,可以把它們push到遠(yuǎn)程倉(cāng)庫(kù)來(lái)共享。圖最上方的add、commit、push等,展示了git倉(cāng)庫(kù)的產(chǎn)生過(guò)程。反過(guò)來(lái),我們可以從遠(yuǎn)程歷史倉(cāng)庫(kù)中獲得本地倉(cāng)庫(kù)的最后一個(gè)版本,clone到本地,從本地檢出對(duì)象的各個(gè)版本到index暫存區(qū)或工作目錄中,從而實(shí)現(xiàn)任何對(duì)象或整個(gè)倉(cāng)庫(kù)的任意階段狀態(tài)的”回滾”。當(dāng)正向和反向都能自由切換后,git就強(qiáng)大到無(wú)所不能了。

Linux git命令參數(shù)及用法詳解 #/Linux/2012-01/51205.htm

Fedora通過(guò)Http Proxy下載Git #/Linux/2009-12/23170.htm

Ubuntu Server上安裝Git #/Linux/2009-06/20421.htm

服務(wù)器端Git倉(cāng)庫(kù)的創(chuàng)建(Ubuntu) #/Linux/2011-02/32542.htm

Linux下Git簡(jiǎn)單使用教程(以Android為例) #/Linux/2010-11/29883.htm

Git權(quán)威指南 PDF高清中文版 #/Linux/2013-10/91053.htm

Git 2分鐘指南 #/Linux/2014-11/109201.htm

一開(kāi)始接觸這些概念可能比較繞,其實(shí)在git入門(mén)階段,可以先拋開(kāi)遠(yuǎn)程倉(cāng)庫(kù)不看,只了解管理本地倉(cāng)庫(kù)的”3棵樹(shù)”就夠了。如下圖: 

常用GIT命令

在開(kāi)始之前,我們需要把下面的圖看懂:

  • HEAD,頭,它始終指向當(dāng)前所處分支的最新的提交點(diǎn)。你所處的分支變化了,或者產(chǎn)生了新的提交點(diǎn),HEAD就會(huì)跟著改變。
  • working directory,它是你的工作目錄,也是當(dāng)前你看到的東西。你的工作目錄是與版本、分支相關(guān)的。
  • stage的東西雖然看不見(jiàn),但是執(zhí)行g(shù)it status就會(huì)看到哪些對(duì)象的修改將在下一次commit的時(shí)候被放進(jìn)本地倉(cāng)庫(kù)。這些東西稱(chēng)為stage。

commit

commit把暫存區(qū)的內(nèi)容存入到本地倉(cāng)庫(kù),并使得當(dāng)前分支的HEAD向后移動(dòng)一個(gè)提交點(diǎn)。如果對(duì)最后一次commit不滿(mǎn)意,可以使用git commit --amend來(lái)進(jìn)行撤銷(xiāo),修改之后再提交。如圖所示的,ed489被4ca87取代,但是git log里看不到ed489的影子,這也正是amend的本意:原地修改,讓上一次提交不露痕跡。 

checkout

checkout用來(lái)檢出并切換分支。checkout成功后,HEAD會(huì)指向被檢出分支的最后一次提交點(diǎn)。對(duì)應(yīng)的,工作目錄、暫存區(qū)也都會(huì)與當(dāng)前的分支進(jìn)行匹配。下圖是執(zhí)行g(shù)it checkout maint后的結(jié)果: 

reset

reset命令把當(dāng)前分支指向另一個(gè)位置,并且相應(yīng)的變動(dòng)工作目錄和索引。如下圖,執(zhí)行g(shù)it reset HEAD~3后,當(dāng)前分支相當(dāng)于回滾了3個(gè)提交點(diǎn),由ed489回到了b325c: 
 
reset有3種常用的模式:
—soft,只改變提交點(diǎn),暫存區(qū)和工作目錄的內(nèi)容都不改變
—mixed,改變提交點(diǎn),同時(shí)改變暫存區(qū)的內(nèi)容。這是默認(rèn)的回滾方式
—hard,暫存區(qū)、工作目錄的內(nèi)容都會(huì)被修改到與提交點(diǎn)完全一致的狀態(tài)

diff

我們?cè)赾ommit、merge、rebase、打patch之前,通常都需要看看這次提交都干了些什么,于是diff命令就派上用場(chǎng)了:
 
來(lái)比較下上圖中5種不同的diff方式:

  • 比較不同的提交點(diǎn)之間的異同,用git diff 提交點(diǎn)1 提交點(diǎn)2
  • 比較當(dāng)前分支與其他分支的異同,用git diff 其他分支名稱(chēng)
  • 在當(dāng)前分支內(nèi)部進(jìn)行比較,比較最新提交點(diǎn)與當(dāng)前工作目錄,用git diff HEAD
  • 在當(dāng)前分支內(nèi)部進(jìn)行比較,比較最新提交點(diǎn)與暫存區(qū)的內(nèi)容,用git diff --cached
  • 在當(dāng)前分支內(nèi)部進(jìn)行比較,比較暫存區(qū)與當(dāng)前工作目錄,用git diff
    看起來(lái)有點(diǎn)復(fù)雜?是的,記不住的時(shí)候就看看這些圖吧。

【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!

<  上一篇:圖形繪制利器:Gnuplot
相關(guān)推薦
最新資訊
免費(fèi)試聽(tīng)課程
  • 全部課程
  • IT課程
  • 設(shè)計(jì)課程
  • 運(yùn)營(yíng)課程
Free courses
最新開(kāi)班時(shí)間
  • 北京
  • 上海
  • 廣州
  • 深圳
  • 南京
  • 成都
  • 武漢
  • 西安
  • 青島
  • 天津
  • 杭州
  • 重慶
  • 哈爾濱
  • 濟(jì)南
  • 沈陽(yáng)
  • 合肥
  • 鄭州
  • 長(zhǎng)春
  • 蘇州
  • 長(zhǎng)沙
  • 昆明
  • 太原
  • 無(wú)錫
  • 石家莊
  • 南寧
  • 佛山
  • 珠海
  • 寧波
  • 保定
  • 呼和浩特
  • 洛陽(yáng)
  • 煙臺(tái)
  • 運(yùn)城
  • 濰坊
  • 開(kāi)課名稱(chēng)
  • 開(kāi)班時(shí)間
  • 搶座
  • 咨詢(xún)
  • 開(kāi)課名稱(chēng)
  • 開(kāi)班時(shí)間
  • 搶座
  • 咨詢(xún)
預(yù)約申請(qǐng)?jiān)嚶?tīng)課
收起