注意:这纯粹是出于学习目的的帖子
注意这里我有.git和object文件夹,将用于存储我的提交和暂存的快照。 现在我将继续添加一个新文件,即舞台文件1,并注意它为舞台创建了一个带有哈希码的对象
现在该对象是将要提交的内容的引用,但是如果我删除该对象
并运行git status
,git仍将file1显示为已暂存,但实际上现在没有该对象的引用
file1仍然存在相同的更改,但实际上git无法提交该信息,因为未找到对象,但是为什么git仍将file1显示为已暂存或准备提交
这里git status
的参考是什么?
答案 0 :(得分:2)
据我所知,git status
是git diff
命令运行两次的结果:
git diff --cached
:将当前(HEAD)提交与登台区域进行比较,并且
git diff
(无其他参数)会将登台区域与工作树进行比较。
我做过同样的事情(如您所做的),即修改了一个文件并删除了object
目录的.git
目录内的相应对象,然后运行了git-diff --cached --name-only
,向我显示了文件名我已经修改了。
因此,即使您已删除目标文件,git status
仍会向您显示暂存的文件,因为它正在寻找新创建的对象哈希以建立提交,因此它无法提交。 / p>
为了查看行为,这是我所做的:
您可以看到git缓存中仍然存在修改后的对象哈希,而在进行git commit
时,git寻找的是我先前删除的修改后的对象哈希,并且git抛出错误。