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


Git 的工作流程分類:
- 最簡模式
- 特性分支
- 開發(fā)分支
- 特性分支 + 開發(fā)分支
1.1 最簡模式
最簡單的工作流模式,即只使用 master 主干,適用于個人項目。

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

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

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

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ū)中的文件。
