参考资料:Git分支
Git工作原理
向Git中提交文件的基本过程如下:
git status
git diff .
git add .
git commit
在git add
暂存文件时,实际上做了以下工作:
- 1.为每一个需要暂存的文件计算校验和(SHA-1 哈希算法);
- 2.把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 对象来保存它们);
- 3.将校验和加入到暂存区域等待提交。
在git commit
提交文件时,则做了以下工作:
- 1.首先会计算每一个子目录的校验和,然后将这个校验和在Git仓库中保存为一个树对象;
- 2.创建一个提交对象,包含有git配置的基本信息、指向树对象的指针;
这里举个例子:
$ vi README.md
$ vi test.txt
$ git add .
$ git commit -m "first commit"
当执行完以上命令时,此时git仓库中有如下几个对象:两个blob对象,记录这两个文件快照,一个树文件,记录目录结构和blob的索引,一个提交对象,包含有提交信息和指向树文件的索引。如图所示:
之后每次修改提交,生成的提交对象中都会包含一个指向上次提交对象的指针,如图:
这样,多次提交就后就像一个链表一样对不同的版本建立联系。
Git的分支,就是指向提交对象的可变指针,当通过git init
创建一个Git仓库时,会默认创建一个名为master的分支,也叫作主分支。在每次提交时,会自动向前移动到最新提交对象上,此外,Git还提供了一个特殊的指针HEAD指向当前所在的本地分支,如果此时处于master分支,图示如下:
可以将HEAD理解为当前分支的别名,了解这些原理后,也就能很好的理解分支的创建和切换了。
分支的操作
创建分支
创建分支使用git branch bname
命令,会在当前的提交对象上创建一个指针:
$ git branch
* master
$