通过使用 本地git 看一下git的add,commit是在干什么,分支又是什么
add、commit在干什么
git中有一个对象数据库,存放三种对象blob、tree和commit
find .git/objects/ -type f // 查看所有对象
blob是文件内容,tree是文件目录结构,以下几条命令实现一步步将某数据提交
其中hash可以取前六位
git hash-object -w ${sth} // 将sth写入对象数据库(blob)
git update-index (--add) ${sth} // 将sth放入(更新)缓存区,形成新的tree对象
git commit-tree ${某个tree对象的hash} -m "${提交注释}" // 将某个tree提交,形成新的commit对象
git cat-file ${某个commit对象的hash} // 查看某个commit对象相关信息
分支是什么
echo "${某个commit对象的完整hash}" > .git/refs/heads/${分支名}
这就建立了分支名→某次提交的引用
像下面这样写也可以
git update-ref refs/heads/master ${某个commit对象的hash}
分支其实就是某个commit的引用而已