慕粉4167745
git中文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。 索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit --amend或者git rebase很像。git 模型可以抽象为 远程仓库——remote, 本地三级仓库: level1——working directory level2——stage(index) level3——repository(History)git 各个命令可以理解为在各个仓库间转移数据,各个命令对应对每个仓库输入输出。 便于记忆可以简单分为 低level输入和 高level输入, 注意各level并不一定是相邻的level间转移,可以跨level转移,通过git命令的参数选项来实现,如常见的 git checkout git reset git commit低level输入 高level 输入 working directory 手工创建 git checkout/git stash stage(index) git add git reset History(repository) git commit git pull remote git push