【Git】工作原理
1.工作流程
Git 是目前主流的版本控制系统,其通用流程如下。
![](https://img.haomeiwen.com/i21744606/9a449d6dda12fc51.png)
![](https://img.haomeiwen.com/i21744606/cd2522112cdb0d28.png)
Git 的工作流程分类:
- 最简模式
- 特性分支
- 开发分支
- 特性分支 + 开发分支
1.1 最简模式
最简单的工作流模式,即只使用 master 主干,适用于个人项目。
![](https://img.haomeiwen.com/i21744606/35cfcb1f3e208156.png)
1.2 Feature 特征分支
每个 feature 分支都是用来开发某个新功能。当 feature 分支中的功能开发完成后,这个分支就回合 master 主干。
![](https://img.haomeiwen.com/i21744606/8a11ca6958915fc5.png)
1.3 Developer 开发分支
开发分支基于 master 主干创建,并与 master 一样长期存在。开发分支是开发时随时提交的代码,master 分支中是达到可发布状态的代码。
![](https://img.haomeiwen.com/i21744606/1e59f9b03e0541da.png)
1.4 Developer + Feature 混搭
master 主干是可发布的代码。feature 分支只与 developer 分支合并。当 developer 分支中的代码测试通过后,回合 master 主干并发布。
![](https://img.haomeiwen.com/i21744606/73909fe2623eb326.png)
2.核心概念
Git 工作区、暂存区和版本库是基本的核心概念。
- 工作区:电脑中代码的工作目录 workspace
- 暂存区:存放在 ".git目录下" 下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,即 Git 的版本库
如下所示工作区、版本库中的暂存区和版本库之间的关系。在版本库中标记为 index
的区域是暂存区(stage/index),标记为 master
的是远端 master 主干 pull 到本地版本库。图中的 objects
标识的区域是 Git 的对象库,实际位于 .git/objects
目录下。
当对工作区新增或修改的文件执行 git add
命令时,暂存区的目录树被更新,同时工作区新增或修改的文件内容被写入到对象库 objects
中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作 git commit
时,暂存区的目录树写到版本库的对象库 objects
中,master
本地版本库也会把指向的目录树转移到暂存区的目录树。
当执行 git reset HEAD
时,暂存区的目录树会被重写,被 master
指向的目录树所替换,但是工作区不受影响。 当执行 git rm --cached
命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 git checkout .
或者 git checkout --
命令时,将暂存区全部或指定文件替换到工作区的文件。当执行 git checkout HEAD .
或者 git checkout HEAD
命令时,会用 HEAD
指向的 master
全部或者部分文件替换暂存区和以及工作区中的文件。
![](https://img.haomeiwen.com/i21744606/5b05223a86437514.png)