本文章是作者在學(xué)習(xí) Web 開發(fā)過程中積累的筆記励两。如果這些筆記對(duì)你的學(xué)習(xí)有幫助黎茎,歡迎通過以下方式支持一下,你的支持是我持續(xù)的動(dòng)力 ????
- 關(guān)注公眾號(hào) 無聊才讀書呀
- Star 關(guān)注 Github 倉庫
- 博客地址 無聊才讀書的個(gè)人網(wǎng)站
文章地址: Git 快速上手
三当悔、Git 工作區(qū)傅瞻、暫存區(qū)和版本庫
基本概念
我們先來理解下Git 工作區(qū)、暫存區(qū)和版本庫概念
- 工作區(qū):就是你在電腦里能看到的目錄盲憎。
- 暫存區(qū):英文叫stage, 或index嗅骄。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index)饼疙。
- 版本庫:工作區(qū)有一個(gè)隱藏目錄.git溺森,這個(gè)不算工作區(qū),而是Git的版本庫窑眯。
下面這個(gè)圖展示了工作區(qū)屏积、版本庫中的暫存區(qū)和版本庫之間的關(guān)系:
圖中左側(cè)為工作區(qū),右側(cè)為版本庫磅甩。在版本庫中標(biāo)記為 "index" 的區(qū)域是暫存區(qū)(stage, index)炊林,標(biāo)記為 "master" 的是 master 分支所代表的目錄樹。
圖中我們可以看出此時(shí) "HEAD" 實(shí)際是指向 master 分支的一個(gè)"游標(biāo)"更胖。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來替換。
圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?Git 的對(duì)象庫,實(shí)際位于 ".git/objects" 目錄下却妨,里面包含了創(chuàng)建的各種對(duì)象及內(nèi)容饵逐。
當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹被更新彪标,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫中的一個(gè)新的對(duì)象中倍权,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。
當(dāng)執(zhí)行提交操作(git commit)時(shí)捞烟,暫存區(qū)的目錄樹寫到版本庫(對(duì)象庫)中薄声,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)挑格。