查看某个索引内容
git cat-file -p a9be3f671e3bba97db9b42e808c86e9c5f7a189d
查看blob对象目录
tree .git/objects -L 2
查看所有的分支文件
cd .git/refs/heads/
这个提交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 文件中
会取得暂存区中的内容生成一个 tree 对象 该 tree 对象即为工作区文件的永久快照 然后创建一个指向该 tree 对象的提交对象 最后更新 master 指向本次提交
编辑了文件
假如在工作区编辑了文件 Git 会将其与暂存区现有文件快照进行比较 在 git add 了更改的文件后 根据文件当前内容生成新的 blob 对象并更新 .git/index 文件中的引用 ID git commit 的过程与之前类似 但是新的提交对象会以 HEAD 引用指向的提交作为父提交 然后更新其引用的 master 指向新创建的提交
git checkout
git checkout 一个分支或提交时 它会修改 HEAD 指向新的分支引用或提交 将暂存区填充为该次提交的文件快照 然后将暂存区的内容解包复制到工作区中