【Git原理】深入理解git add和git commit命令

前言

年前在公司內(nèi)部做了一次git原理分享,現(xiàn)在在這里分享其中核心部分之一:關(guān)于git add和commit命令的深入理解。我盡力用最淺顯的文字和生動(dòng)的圖片讓大家了解git原理,當(dāng)然有不足之處還望大牛指點(diǎn)批評(píng)。

目錄

1、理解幾個(gè)概念:git倉(cāng)庫(kù)(版本庫(kù))、暫存區(qū)、HEAD、工作區(qū)
2、git add到底做了什么?
3、git commit到底做了什么?


1、理解幾個(gè)概念:git倉(cāng)庫(kù)(版本庫(kù))、工作區(qū)、暫存區(qū)、HEAD
版本庫(kù),暫存區(qū)和工作區(qū)原理圖

(1) git倉(cāng)庫(kù)(版本庫(kù)):git倉(cāng)庫(kù)就是一個(gè).git文件夾。這個(gè)文件夾內(nèi)包含了很多文件(見插圖2),其中有一個(gè)很重要的文件夾objects,保存了暫存區(qū)的所有文件對(duì)象,包括blob對(duì)象、tree對(duì)象、commit對(duì)象等,這些對(duì)象都是一以文件的形式來(lái)保存的。還有HEAD文件,保存著最新的提交的指針。當(dāng)然很多人到這里可能還是不理解objects中的文件對(duì)象和HEAD中保存的指針到底是什么意思,沒關(guān)系,下面會(huì)詳細(xì)講解。

(2)工作區(qū):在一個(gè)項(xiàng)目目錄中,除了.git文件的其他所有文件的集合就是工作區(qū)。

(3)暫存區(qū):暫存區(qū)可以理解為文件從修改到最后提交到git版本庫(kù)之間的一個(gè)緩存,為了防止一次提交了不必要的文件,有回退的余地,便有了暫存區(qū)。

(4)HEAD:HEAD在.git文件夾中是一個(gè)文件,文件的內(nèi)容是一個(gè)32位的16進(jìn)制數(shù),這只是一個(gè)指針,他指向最近一個(gè)提交點(diǎn)、這個(gè)提交點(diǎn)實(shí)質(zhì)是一個(gè)commit對(duì)象,對(duì)象里包含里多個(gè)屬性,包括最后一個(gè)提交點(diǎn)目錄結(jié)構(gòu)索引、上一次提交點(diǎn)id、提交人、提交時(shí)間等。

2、git add到底做了什么?

(1) 首先,跟著我的思路,我們來(lái)創(chuàng)建一個(gè)git倉(cāng)庫(kù), 通過一個(gè)例子來(lái)理解git add命令

1、首先,我們通過git init來(lái)創(chuàng)建一個(gè)倉(cāng)庫(kù),這時(shí)會(huì)生成一個(gè).git文件夾,這個(gè)文件夾就一個(gè)git倉(cāng)庫(kù)

2、創(chuàng)建一個(gè)文件A.java
執(zhí)行 git add A.java
到.git里面的objects文件中,發(fā)現(xiàn),多了一個(gè)文件夾,打開,里面有一個(gè)文件,名字是一串符號(hào),打開這個(gè)文件,里面是一串無(wú)法識(shí)別的字符。

git add做了啥?
其實(shí),在執(zhí)行g(shù)it add命令的時(shí)候,git首先會(huì)通過hash函數(shù)算出文件名A.java對(duì)應(yīng)的sha-1值是1fed2a34f13dd2a34f13d,這個(gè)code是一個(gè)32位的16進(jìn)制數(shù),git會(huì)取這個(gè)code的前兩位作為文件夾名在.git/objects文件夾中創(chuàng)建一個(gè)文件夾1f,取code的后30位作為文件名,在.git/objects/1f中創(chuàng)建一個(gè)文件ed2a34f13dd2a34f13d,git會(huì)將A.java的文件內(nèi)容通過一定的壓縮保存在這個(gè)文件中
未完待續(xù).....

本文到這里就快結(jié)束了,文中可能有些地方?jīng)]有說(shuō)明清楚,歡迎指定討論,有問題歡迎騷擾,看到會(huì)第一時(shí)間回復(fù)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,848評(píng)論 9 163
  • 在Scrum角色中包括:產(chǎn)品負(fù)責(zé)人(Product Owner,PO)、ScrumMaster(SM)、開發(fā)團(tuán)隊(duì)(...
    ccixom閱讀 3,494評(píng)論 0 1
  • 2017年6月上線的《大軍師司馬懿之軍師聯(lián)盟》,該劇從曹魏的全新視角切入,抒寫了魏國(guó)大軍師司馬懿(yì,字仲達(dá))跌...
    修不好_閱讀 568評(píng)論 0 1
  • 一年前,或者是更久的日子之前,我被自己困在時(shí)間的孤島,我自言自語(yǔ)說(shuō)我等待你,滄海桑田也等待你。 湖泊偽裝成天空,命...
    路遠(yuǎn)先生1閱讀 505評(píng)論 5 8
  • 別皈依了絕望,我們可以皈依很多東西,但是絕望就算了,都說(shuō)絕處逢生,所以時(shí)不時(shí)的給自己一些正能量讓自己做一個(gè)打不倒的人。
    合肥李風(fēng)麗閱讀 204評(píng)論 0 0

友情鏈接更多精彩內(nèi)容