Git是開發(fā)工作中常用的版本工具锥惋,但是很多gay友都僅僅限于常規(guī)的clone屋群、push 畏梆、pull您宪,導(dǎo)致在工作中遇到誤操作時(shí)不能夠靈活變換,當(dāng)想去學(xué)習(xí)Git的時(shí)候奠涌,往往會(huì)被一些文章中的抽象概念宪巨,工作區(qū),暫存區(qū)溜畅,本地倉庫捏卓,遠(yuǎn)程倉庫繞暈,不明白僅僅是操作了本地的代碼慈格,Git如何把本地代碼上傳到遠(yuǎn)程服務(wù)器怠晴,哪里有這么多的動(dòng)作產(chǎn)生。
可惜了Git這么強(qiáng)大的工具浴捆。本文主要想探究常用Git命令背后到底是操作了什么蒜田?常用命令的相反操作又如何執(zhí)行?
本地安裝完成Git之后选泻,配置好公鑰冲粤,執(zhí)行以下步驟:
1、git init滔金,初始化本地倉庫色解,這個(gè)命令會(huì)創(chuàng)建一個(gè).git子目錄,所有g(shù)it命令相關(guān)的操作產(chǎn)生的變動(dòng)都在該目錄下對(duì)應(yīng)的文件體現(xiàn)餐茵,tree .git? /f? 查看初始化倉庫中的目錄和文件科阎。
2、git add忿族,在工作區(qū)新增一個(gè)文件testFile.txt锣笨,執(zhí)行命令git add .當(dāng)執(zhí)行這個(gè)命令的時(shí)候蝌矛,觀察.git中目錄和文件的變化。
通過命令查看objects的文件
查看objects存儲(chǔ)類型——git cat-file -t? bdf08d
查看objects存儲(chǔ)內(nèi)容——git cat-file -p? bdf08d
上述命令查看入撒,發(fā)現(xiàn)git add命令會(huì)生成objects,存儲(chǔ)類型blob椭岩,存儲(chǔ)了文件的內(nèi)容茅逮,注意objects不存儲(chǔ)文件的名字。
Git通過固定算法判哥,將文件內(nèi)容生成固定長(zhǎng)度的hash值献雅。而文件名的信息就存儲(chǔ)在了新增的index(索引區(qū))文件中,通過命令git ls-files -s查看塌计,存在文件名和文件內(nèi)容hash值的對(duì)應(yīng)關(guān)系挺身。
這里同樣能夠理解了為什么git status命令查看時(shí),Git可以追蹤到工作區(qū)文件的狀態(tài)锌仅,本質(zhì)是Git校驗(yàn)了工作區(qū)文件和索引區(qū)文件的內(nèi)容hash和是否存在文件名和hash的對(duì)應(yīng)關(guān)系章钾。
git add命令實(shí)現(xiàn)文件從工作區(qū)——>索引區(qū)的變化,以下兩種文件狀態(tài)變更時(shí)使用:
Untracked——>Staged热芹,使用git add
Modified——>Staged贱傀,使用git add
git add對(duì)應(yīng)的反向操作,將指定文件移除索引區(qū)伊脓,執(zhí)行命令git rm --cached spring.log
3窍箍、git commit,執(zhí)行commit命令丽旅,并觀察.git中目錄和文件的變化椰棘。
新生成兩個(gè)objects對(duì)象,通過命令查看objects的文件:
查看objects存儲(chǔ)類型——git cat-file -t? 792e4b4榄笙,git cat-file -t? 514cc27
查看objects存儲(chǔ)內(nèi)容——git cat-file -p 792e4b4 狂秘,git cat-file -p514cc27
792e4b4為commit對(duì)象:包含一個(gè)tree對(duì)象懊昨、author信息及commit的信息婉支,以及parent指向上一次commit記錄
514cc27為tree對(duì)象:包含文件內(nèi)容的hash和文件名對(duì)應(yīng)關(guān)系稽穆。
除此之外commit命令產(chǎn)生的變化還有當(dāng)前指針的變化,HEAD文件永遠(yuǎn)指向當(dāng)前的工作分支米丘,通過命令可以看出當(dāng)前的工作分支master指向最新的commit對(duì)象剑令。
git commit命令實(shí)現(xiàn)文件從索引區(qū)——>本地倉庫的變化:
Staged——>Unmodified,使用git commit
git commit反向操作拄查,執(zhí)行g(shù)it reset HEAD^:
意味著返回上一個(gè)版本吁津,撤銷commit,
不撤銷git add
工作空間改動(dòng)的代碼保留堕扶。
文章參考B站學(xué)習(xí)視頻:https://space.bilibili.com/364122352?from=search&seid=18202198804764648480
參考書籍《pro Git》 Scott Chacon, Ben Straub