暂存区域是否包含上次提交内容的快照? 或其他什么?
如果git status
显示:
On branch master
nothing to commit, working directory clean
然后我发出git diff --cached
所以将HEAD
与什么进行比较?
答案 0 :(得分:1)
前提条件阅读:Read about Git objects, particularly trees and blobs, first。
简短回答:索引始终包含HEAD中文件blob的ID,以及一组用于跟踪文件更改的标志。它不包含最后一次提交的快照,也不是树对象(下面的例外)。
The really long answer can be read here
稍长答案:索引(.git/index
)始终存储HEAD中所有文件的blob ID和文件路径列表,以及有关文件的元数据(权限,修改时间) ,业主等......)。
索引还可以包含预先计算的tree objects (how Git stores directories)以加快提交。它还存储有关冲突的信息。
所以"空" index包含所有文件路径,其blob ID,有关文件的元信息以及存储冲突信息的空间的列表。因为它只存储blob ID(160位),所以索引避免了HEAD的冗余。对于像Perl和Git这样的大型项目,我项目的索引文件大小不到1K到500K。
答案 1 :(得分:1)
工作目录是否干净并不与暂存区域包含的内容有任何关系。暂存区域包含已提交进行提交的内容(例如,使用git add
)。是的,没有上演的任何文件将处于与HEAD
相同的状态,除非你做了一些奇怪的事情。 git diff --cached
正在将暂存区域的内容与HEAD
进行比较(它也可以称为git diff --staged
)。由于git commit
将暂存区域的内容转换为提交,git diff --staged
会显示您现在提交时将提交的内容。
由于您的git status
输出显示“无需提交”,因此它已经告诉您没有分阶段更改,并且git diff --staged
不会报告任何内容。