众所周知,git add 操作会将当前工作区的文件存储进暂存区。那么内部实现细节是什么呢?git commit
又是什么实现呢?
git add
git add命令执行时会为相关文件使用 sha-1 计算校验和,然后将权限码、blob对象(单个文件的快照)、文件名等更新至 .git/index 文件,而 .git/index 文件即是暂存区。查看 .git/index 文件:
git commit
git commit会创建一个 commit 对象,它包含树对象、指向parent commit的指针、author、committer、Date信息、commit message,其中,树对象是当前项目所在的 文件夹快照,像文件夹一样,树对象可能包含树对象,而树对象的最深处数据则是文件夹下的文件快照 即blob对象。而 commit SHA 则是使用 SHA-1 算法对commit对象处理的值。查看commit 对象如下:
Notice
- 从git 2.0.0版本开始,
git add .也可以更新已删除文件的index。