Git作为目前最流行的版本管理工具,我在工作中已经使用了很长一段时间了,但是每天git add, push, pull的却没有真正花时间去了解一下Git原理,这周的主题我来看看Git的入门原理。
初始化
1 | $ git init |
如果我们想本地新建一个git项目的话,运行上面命令进行初始化,这个命令背后实际在当前目录下创建一个.git的子目录,用来保存版本信息,进入.git目录看看里面都有哪些东西
粗略看一眼,里面有branch, hooks, logs, HEAD等信息,大概知道它们用来储存什么。
暂存区
所有在git项目内有变动的内容,git都会把它们暂时存在一个地方,叫做“暂存区”,英文index或者stage.
1 | $ git update-index --add --cacheinfo 100644 \ |
上面这个命令用来在index里记录一个变动的文件
1 | $ git ls-files --stage |
上面这个命令用来显示暂存区里的东西,同时会显示出文件名 + 二进制对象名 + 权限。 知道了二进制对象名,就可以在.git/objects目录里读出这个文件的内容了
git add
如果每次都更新暂存区,那文件一多就太麻烦了,于是git提供了一个简化版的命令
1 | $ git add --all |
这个命令相当于,对所有当前项目中有改变的文件,保存为object,然后添加到index.
commit
当我们完成一个功能之后,需要把改动的代码一起生成一个快照,写到git历史中。git的历史由不同时间点的快照组成,也就是我们平时在sourceTree中看到的
我们可以把项目恢复到任意一个节点快照。每个节点快照称作一个commit.
快照 = 保存当前的目录结构,以及每个文件对应的二进制对象。
git commit
使用git commit命令,可以同时提交目录结构 + index文件 + 快照说明1
$ git commit -m "first commit"
git log原理
1 | 1. 查找head指针对应的分支 |