我的Git筆記開篇 基本概念

2021-10-02 10:10:40 字數 1957 閱讀 4489

趁著過年,我把之前學習過的git內容好好整理了一下,準備寫幾篇關於git的部落格,一方面可以加深我對git的認識,另一方面也希望可以幫助到有需要的小夥伴。我在使用git工具的時候,經常會碰到這樣幾個概念:倉庫、引用、工作區、物件。這幾個概念可以說是git學習的核心點了,只要把這幾個概念弄清楚,後面使用git操作的每一步都會變得十分清楚。下面我就從這幾個基本概念講起,簡單來說可以概括為一句話:乙個倉庫、兩個引用、三大工作區、四種物件。

倉庫(repository),又稱版本庫,是我們檔案最終存放的地方,分為本地倉庫和遠端倉庫。

git的本質是一套內容定址的檔案系統。git分為工作目錄、暫存區和版本庫三大工作區。

工作目錄,又稱工作區,是使用者實際操作檔案的區域,在工作區的檔案狀態有兩種:未被追蹤(untracked)和已經被追蹤(tracked)。在工作區中如果對檔案進行修改,但是沒有新增到暫存區,是不會被提交到版本庫的。

暫存區,位於版本庫內,實際上是乙個包含檔案索引(建立了檔案和物件庫中物件之間的關聯 )的目錄樹,我們檔案修改的內容並沒有儲存到該區域,它記錄了檔名和檔案狀態資訊(時間戳、檔案長度等) 。

版本庫,該區域中檔案有三種狀態:已修改(modified)、已暫存(staged)、已提交(committed)。

git有四種物件模型,分別是blob、tree、commit、tag。git使用sha-1演算法,以資料物件的內容作為輸入,生成40個字元組成的字串來作為物件的識別符號。例如同乙個檔案做了修改重新提交,git就是通過比較sha-1值來比較兩次提交的內容。

git cat-file [-tp] sha-1  #檢視git物件使用命令,引數t表示檢視物件型別,p表示檢視物件內容
blob物件,用來儲存檔案資料,通常是乙個檔案。檢視blob物件內容也可以使用命令

git show sha-1
tree物件,是一串指向blob或其它tree物件的指標。它的作用和目錄類似,主要用來管理blob和tree物件,表示目錄樹的內容、內容之間的層次目錄關係。檢視tree物件內容還可以使用如下命令

git ls-tree sha-1

git cat-file -p master^

git show sha-1

commit物件,用來指向乙個tree物件,由乙個tree物件、父物件、作者、提交者組成。 標記專案某個特定時間點的狀態 。注意:乙個提交本身並沒有包含任何資訊說明其做了哪些修改,所有的修改都是通過與父提交比較得來的。提交commit物件使用git commit命令提交,將暫存在暫存區域的index全部提交,提交的父物件為當前分支head。

檢視每次提交修改的具體內容命令:

git log -p  #通過上下鍵來檢視所有提交修改的內容
tag物件,在git裡tag既是一種物件型別,也是乙個引用,這部分內容放在引用裡介紹。

引用的本質即指標,git中分支和標籤都是對提交的引用(指向commit物件的指標) ,存放路徑位於:.git/refs。

標籤(tag)物件,由物件名、物件型別、標籤名、標籤建立者名字組成。

在git中,標籤有兩類,輕量級tag和重量級tag。輕量級tag的型別為commit物件。重量級tag的型別為tag物件,在建立重量級tag的時候會在物件庫中生成乙個tag物件,輕量級tag只是commit的引用。

標籤與分支(branch)相比,都是指向乙個commit物件,標籤可以看做是乙個常量指標,不能改變;而分支是乙個變數指標。關於分支和標籤的使用,我在後面會單獨再講。

GIT基本概念

工作區是個工作目錄,實質上就是我們的在開發過程中對其進行新增 編輯的源 包括標頭檔案 原始檔和配置檔案 在工作區中有乙個隱藏檔案 git 它不屬於工作區,而是git版本庫。該檔案下包括很多其他檔案,其中重要的是暫存區 git index 物件庫 git objects 分支 master分支和其他分...

git 基本概念

理解git首先要對它自己的主要概念理解清楚,這個我看了一邊後又重新梳理了一邊思路,提取了幾個自己很容易誤解和難區分的概念,在這裡詳細介紹下 工作區 就是你在電腦裡能看到的目錄,比如我的learngit資料夾就是乙個工作區。暫存區 工作區有乙個隱藏目錄.git,這個不算工作區,而是git的版本庫。gi...

git基本概念

為了便於管理,git要求每個遠端主機都必須指定乙個主機名。git remote命令就用於管理主機名。不帶選項的時候,git remote命令列出所有遠端主機。一旦遠端主機的版本庫有了更新 git術語叫做commit 需要將這些更新取回本地,這時就要用到git fetch命令。預設情況下,git fe...