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比较,哪个更好?