Git的學(xué)習(xí)之路02 Git的工作流程捆毫、工作區(qū)闪湾、暫存區(qū)、版本庫(kù)及創(chuàng)建版本庫(kù)

Git的一般工作流程如下:

  1. 克隆 Git 資源作為工作目錄绩卤。
  1. 在克隆的資源上添加或修改文件途样。
  2. 如果其他人修改了损合,你可以更新資源。
  3. 在提交前查看修改娘纷。
  4. 提交修改嫁审。
  5. 在修改完成后,如果發(fā)現(xiàn)錯(cuò)誤赖晶,可以撤回提交并再次修改并提交律适。

Git 工作區(qū)、暫存區(qū)和版本庫(kù):

首先我們需要來(lái)理解下Git 工作區(qū)遏插、暫存區(qū)和版本庫(kù)的基本概念:
  • 工作區(qū)(Working Directory):就是你在電腦里能看到的目錄捂贿。
  • 暫存區(qū)(StagingArea):英文叫stage, 或index。Git和其他版本控制系統(tǒng)如SVN的一個(gè)不同之處就是有暫存區(qū)的概念胳嘲。一般存放在"git目錄"下的index文件(.git/index)中厂僧,所以我們把暫存區(qū)有時(shí)也叫作索引(index)。

可能有些人會(huì)覺得很奇怪了牛,為什么git會(huì)有暫存區(qū)域這個(gè)概念颜屠,直接提交到倉(cāng)庫(kù)中不就ok了。其實(shí)這是git為了做版本控制用的鹰祸,試想如果沒有暫存區(qū)域甫窟,每修改一個(gè)文件,就會(huì)形成一個(gè)版本蛙婴,太過頻繁粗井,不易于管理。暫存區(qū)域其實(shí)就是下一個(gè)版本的文件清單街图,你可以自由控制該往倉(cāng)庫(kù)中提交什么文件浇衬,這也可以避免在一個(gè)版本中包含一些中間文件,比如編譯后的文件餐济。

  • 版本庫(kù)(Repository):工作區(qū)有一個(gè)隱藏目錄.git耘擂,這個(gè)不算工作區(qū),而是Git的版本庫(kù)颤介。

什么是版本庫(kù)呢梳星?版本庫(kù)又名倉(cāng)庫(kù),英文名repository滚朵,你可以簡(jiǎn)單理解成一個(gè)目錄冤灾,這個(gè)目錄里面的所有文件都可以被Git管理起來(lái),每個(gè)文件的修改辕近、刪除韵吨,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史移宅,或者在將來(lái)某個(gè)時(shí)刻可以“還原”归粉。

創(chuàng)建版本庫(kù):

創(chuàng)建一個(gè)版本庫(kù)非常簡(jiǎn)單椿疗,首先,第一步:選擇一個(gè)合適的地方糠悼,創(chuàng)建一個(gè)空目錄:

$ mkdir mygit     
$ cd mygit
$ pwd                                   //pwd命令用于顯示當(dāng)前目錄
/Users/Desktop/mygit   ```
注意:如果使用的是坑爹的Windows系統(tǒng)届榄,為了避免遇到各種莫名其妙的問題,請(qǐng)確保目錄名(包括父目錄)不包含中文倔喂。
第二步:通過`git init`命令把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù):
> Git 使用**git init**命令來(lái)初始化一個(gè) Git 倉(cāng)庫(kù)铝条,Git 的很多命令都需要在 Git 的倉(cāng)庫(kù)中運(yùn)行,所以**git init**是使用 Git 的第一個(gè)命令席噩。在執(zhí)行完成命令后班缰,Git 倉(cāng)庫(kù)會(huì)生成一個(gè) .git 目錄,該目錄包含了資源的所有元數(shù)據(jù)悼枢,其他的項(xiàng)目目錄保持不變(不像 SVN 會(huì)在每個(gè)子目錄生成 .svn 目錄埠忘,Git 只在倉(cāng)庫(kù)的根目錄生成 .git 目錄)。

$ git init
Initialized empty Git repository in /Users/Desktop/mygit/.git/```

使用Git 很輕松的就把倉(cāng)庫(kù)建好了馒索,而且告訴你是一個(gè)空的倉(cāng)庫(kù)(empty Git repository)莹妒,另外多的這一個(gè).git的目錄是Git來(lái)跟蹤管理版本庫(kù)的,沒事千萬(wàn)不要手動(dòng)修改這個(gè)目錄里面的文件双揪,不然改亂了动羽,就把Git倉(cāng)庫(kù)給破壞了包帚。
如果你沒有看到.git目錄渔期,那是因?yàn)檫@個(gè)目錄默認(rèn)是隱藏的,用ls -ah命令就可以看見渴邦。
也不一定必須在空目錄下創(chuàng)建Git倉(cāng)庫(kù)疯趟,選擇一個(gè)已經(jīng)有東西的目錄也是可以的。不過谋梭,不建議你使用自己正在開發(fā)的公司項(xiàng)目來(lái)學(xué)習(xí)Git信峻,否則造成的一切后果概不負(fù)責(zé)。

                        下面這個(gè)圖展示了工作區(qū)瓮床、版本庫(kù)中的暫存區(qū)和版本庫(kù)之間的關(guān)系: 
  • 圖中左側(cè)為工作區(qū)盹舞,右側(cè)為版本庫(kù)。Git的版本庫(kù)里存了很多東西隘庄,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)踢步,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master目錄樹,以及指向master的一個(gè)指針叫HEAD丑掺。
  • 圖中我們可以看出此時(shí) "HEAD" 實(shí)際是指向 master 分支的一個(gè)"游標(biāo)".获印。所以圖示的 命令中出現(xiàn) HEAD 的地方可以用 master 來(lái)替換。
  • 圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?** Git 的對(duì)象庫(kù)***街州,實(shí)際位于 ".git/objects" 目錄下兼丰,里面包含了創(chuàng)建的各種對(duì)象及內(nèi)容玻孟。
  • 當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹被更新鳍征,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中黍翎,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。
  • 當(dāng)執(zhí)行提交操作(git commit)時(shí)艳丛,暫存區(qū)的目錄樹寫到版本庫(kù)(對(duì)象庫(kù))中玩敏,master 分支會(huì)做相應(yīng)的更新。即 master 指向的目錄樹就是提交時(shí)暫存區(qū)的目錄樹质礼。
  • 當(dāng)執(zhí)行 "git reset HEAD" 命令時(shí)旺聚,暫存區(qū)的目錄樹會(huì)被重寫,被 master 分支指向的目錄樹所替換眶蕉,但是工作區(qū)不受影響砰粹。
  • 當(dāng)執(zhí)行 "git rm --cached <file>" 命令時(shí),會(huì)直接從暫存區(qū)刪除文件造挽,工作區(qū)則不做出改變碱璃。
  • 當(dāng)執(zhí)行 "git checkout ." 或者 "git checkout -- <file>" 命令時(shí),會(huì)用暫存區(qū)全部或指定的文件替換工作區(qū)的文件饭入。這個(gè)操作很危險(xiǎn)嵌器,會(huì)清除工作區(qū)中未添加到暫存區(qū)的改動(dòng)。
  • 當(dāng)執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時(shí)谐丢,會(huì)用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件爽航。這個(gè)命令也是極具危險(xiǎn)性的,因?yàn)椴坏珪?huì)清除工作區(qū)中未提交的改動(dòng)乾忱,也會(huì)清除暫存區(qū)中未提交的改動(dòng)讥珍。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窄瘟,隨后出現(xiàn)的幾起案子衷佃,更是在濱河造成了極大的恐慌,老刑警劉巖蹄葱,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氏义,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡图云,警方通過查閱死者的電腦和手機(jī)惯悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琼稻,“玉大人吮螺,你說我怎么就攤上這事。” “怎么了鸠补?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵萝风,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我紫岩,道長(zhǎng)规惰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任泉蝌,我火速辦了婚禮歇万,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勋陪。我一直安慰自己贪磺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布诅愚。 她就那樣靜靜地躺著寒锚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪违孝。 梳的紋絲不亂的頭發(fā)上刹前,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音雌桑,去河邊找鬼喇喉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛校坑,可吹牛的內(nèi)容都是我干的拣技。 我是一名探鬼主播过咬,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼制妄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泵三?” 一聲冷哼從身側(cè)響起耕捞,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烫幕,沒想到半個(gè)月后俺抽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡较曼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年磷斧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弛饭,死狀恐怖冕末,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情档桃,我是刑警寧澤憔晒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布藻肄,位于F島的核電站,受9級(jí)特大地震影響拒担,放射性物質(zhì)發(fā)生泄漏嘹屯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一从撼、第九天 我趴在偏房一處隱蔽的房頂上張望呆馁。 院中可真熱鬧,春花似錦毁兆、人聲如沸浙滤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纺腊。三九已至,卻和暖如春茎芭,著一層夾襖步出監(jiān)牢的瞬間揖膜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工梅桩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壹粟,地道東北人宿百。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓趁仙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垦页。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雀费,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容