git add 和 git commit 实现细节

163 阅读1分钟

众所周知,git add 操作会将当前工作区的文件存储进暂存区。那么内部实现细节是什么呢?git commit 又是什么实现呢?

git add

git add命令执行时会为相关文件使用 sha-1 计算校验和,然后将权限码blob对象(单个文件的快照)文件名等更新至 .git/index 文件,而 .git/index 文件即是暂存区。查看 .git/index 文件: .git/index文件截图

git commit

git commit会创建一个 commit 对象,它包含树对象指向parent commit的指针authorcommitterDate信息commit message,其中,树对象是当前项目所在的 文件夹快照,像文件夹一样,树对象可能包含树对象,而树对象的最深处数据则是文件夹下的文件快照 即blob对象。而 commit SHA 则是使用 SHA-1 算法对commit对象处理的值。查看commit 对象如下: 查看commit 对象截图

Notice
  • 从git 2.0.0版本开始,git add . 也可以更新已删除文件的index