git用惯了的git commit,我们还有不知道的
Posted 码农搬砖_2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git用惯了的git commit,我们还有不知道的相关的知识,希望对你有一定的参考价值。
首先,我们先回顾一下,Git 的实现基础原理,Git 保存的不是文件差异或者变化量,而只是一系列文件快照.
/ 01 /
Git 和其他版本控制系统的主要差别在于,Git直接记录快照,而非差异比较。也就是说Git 只关心文件数据的整体是否发生变化,而大多数其他系统则关心的是文件内容的具体差异。
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接用。让我们用一张图来解释一下:
实框,代表该文件的代码变化了,生成新的快照,虚框代表和上次相比没有发生变化,对上一次保存的快照做一个链接。
/ 02 /
git add README test.rb LICENSE
在 Git 中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针。为直观起见,我们假设在工作目录中有三个文件(README/test.rb/LICENSE),准备将它们暂存后提交。暂存操作(add)会对每一个文件计算校验和(SHA-1 哈希字串),然后把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 类型的对象存储这些快照),并将校验和加入暂存区域。
/ 03 /
git commit -m 'initial commit of my project'
当使用 git commit 新建一个提交对象前,Git 会先计算每一个子目录(本例中就是项目根目录)的校验和,然后在 Git 仓库中将这些目录保存为树(tree)对象。之后 Git 创建的提交对象,除了包含相关提交信息以外,还包含着指向这个树对象(项目根目录)的指针,如此它就可以在将来需要的时候,重现此次快照的内容了。
现在,Git 仓库中有五个对象:三个表示文件快照内容的 blob 对象;一个记录着目录树内容及其中各个文件对应 blob 对象索引的 tree 对象;以及一个包含指向 tree 对象(根目录)的索引和其他提交信息元数据的 commit 对象。概念上来说,仓库中的各个对象保存的数据和相互关系看起来如图所示
/ 04 /
关注我们,遇见属于你的精彩!
以上是关于git用惯了的git commit,我们还有不知道的的主要内容,如果未能解决你的问题,请参考以下文章
未commit 执行git stash后怎么恢复
git基本使用总结
没文化 用惯了正则 没能完成hash查找 虽然还是不知道他们是否有什么关联
Git命令add和commit的区别
GIT命令汇总
SVN和Git比较,哪个更好?