【Git】工作原理

1.工作流程

Git 是目前主流的版本控制系統(tǒng),其通用流程如下。

image.png
image.png

Git 的工作流程分類

  • 最簡模式
  • 特性分支
  • 開發(fā)分支
  • 特性分支 + 開發(fā)分支

1.1 最簡模式

最簡單的工作流模式,即只使用 master 主干,適用于個人項目。

image.png

1.2 Feature 特征分支

每個 feature 分支都是用來開發(fā)某個新功能。當(dāng) feature 分支中的功能開發(fā)完成后,這個分支就回合 master 主干。

image.png

1.3 Developer 開發(fā)分支

開發(fā)分支基于 master 主干創(chuàng)建,并與 master 一樣長期存在。開發(fā)分支是開發(fā)時隨時提交的代碼,master 分支中是達(dá)到可發(fā)布狀態(tài)的代碼。

image.png

1.4 Developer + Feature 混搭

master 主干是可發(fā)布的代碼。feature 分支只與 developer 分支合并。當(dāng) developer 分支中的代碼測試通過后,回合 master 主干并發(fā)布。

image.png

2.核心概念

Git 工作區(qū)、暫存區(qū)和版本庫是基本的核心概念。

  • 工作區(qū):電腦中代碼的工作目錄 workspace
  • 暫存區(qū):存放在 ".git目錄下" 下的 index 文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)。
  • 版本庫:工作區(qū)有一個隱藏目錄.git,即 Git 的版本庫

如下所示工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關(guān)系。在版本庫中標(biāo)記為 index 的區(qū)域是暫存區(qū)(stage/index),標(biāo)記為 master 的是遠(yuǎn)端 master 主干 pull 到本地版本庫。圖中的 objects 標(biāo)識的區(qū)域是 Git 的對象庫,實際位于 .git/objects 目錄下。

當(dāng)對工作區(qū)新增或修改的文件執(zhí)行 git add 命令時,暫存區(qū)的目錄樹被更新,同時工作區(qū)新增或修改的文件內(nèi)容被寫入到對象庫 objects 中的一個新的對象中,而該對象的ID被記錄在暫存區(qū)的文件索引中。

當(dāng)執(zhí)行提交操作 git commit 時,暫存區(qū)的目錄樹寫到版本庫的對象庫 objects 中,master 本地版本庫也會把指向的目錄樹轉(zhuǎn)移到暫存區(qū)的目錄樹。

當(dāng)執(zhí)行 git reset HEAD 時,暫存區(qū)的目錄樹會被重寫,被 master 指向的目錄樹所替換,但是工作區(qū)不受影響。 當(dāng)執(zhí)行 git rm --cached 命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。

當(dāng)執(zhí)行 git checkout . 或者 git checkout -- 命令時,將暫存區(qū)全部或指定文件替換到工作區(qū)的文件。當(dāng)執(zhí)行 git checkout HEAD . 或者 git checkout HEAD 命令時,會用 HEAD 指向的 master 全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。

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

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

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