GIT的工作流程
原创
©著作权归作者所有:来自51CTO博客作者wx58c2b58cac641的原创作品,请联系作者获取转载授权,否则将追究法律责任
前文回顾
查看提交历史
提交历史有很多的提交记录
每一个提交记录都有一个提交ID
查看某一个ID的提交内容
git cat-file -p 64142844bdfc78e7c734b564abccf2f8be6f6bc7
每一个提交记录其实是一个tree对象
每次提交会包含多个文件或文件夹
每个文件夹是一个tree对象
每个文件是一个blob对象
文件夹中有多个文件即一个tree对象里面包含多个blob对象
查看这次提交包含的内容
git ls-tree 4b5fc5cd305e894714c1ebaac4593d48b6a1646d
查看blob文件内容
git cat-file -p 5a78f48c31aebeef0bbdd0de26d809f1480f14ec
每一个文件夹其实是一个树状结构
这棵树上的每个节点都会包含这几部分
ID(tree有tree id,blob有blob id)(ID也就是对象的hash值)、
每个文件的实际数据
ID值会存储在暂存区
文件的实际数据会存储在提交历史中
ID值作为索引会指向实际存储的数据
查看index文件
查看某个索引内容
git cat-file -p a9be3f671e3bba97db9b42e808c86e9c5f7a189d
查看blob对象目录
查看所有的分支文件
查看git分支对应的提交ID
这个提交ID是一个指向某一系列提交之首的指针或引用
HEAD指向最近的一次提交
HEAD 文件通常是一个符号引用
指向目前所在的分支
所谓符号引用,表示它是一个指向其他引用的引用
cat .git/HEAD
「分离 HEAD」状态即不再指向分支引用
当检出一个标签、提交
HEAD文件就会包含一个git对象的SHA-1值
仓库就变成了 「分离 HEAD」状态时
git checkout 5edc729711acde4a2647730a2af54f5a1fd36bc6
GIT工作流程
一个新目录里面有一个README文件
目前暂存区和提交历史都是空的
提交该文件
git add .
首先需要通过 git add 将其添加到暂存区
此时 Git 将在 .git/objects 目录中以该文件的内容生成一个 blob 对象
并将 blob 对象的信息添加到 .git/index 文件中
git commit
会取得暂存区中的内容生成一个 tree 对象
该 tree 对象即为工作区文件的永久快照
然后创建一个指向该 tree 对象的提交对象
最后更新 master 指向本次提交
编辑了文件
假如在工作区编辑了文件
Git 会将其与暂存区现有文件快照进行比较
在 git add 了更改的文件后
根据文件当前内容生成新的 blob 对象并更新 .git/index 文件中的引用 ID
git commit 的过程与之前类似
但是新的提交对象会以 HEAD 引用指向的提交作为父提交
然后更新其引用的 master 指向新创建的提交
git checkout
git checkout 一个分支或提交时
它会修改 HEAD 指向新的分支引用或提交
将暂存区填充为该次提交的文件快照
然后将暂存区的内容解包复制到工作区中