git status的工作方式以及在何处显示结果

时间:2018-09-19 07:14:03

标签: git

注意:这纯粹是出于学习目的的帖子

我将使用git init在本地创建一个git存储库,这里是 enter image description here

注意这里我有.git和object文件夹,将用于存储我的提交和暂存的快照。 现在我将继续添加一个新文件,即舞台文件1,并注意它为舞台创建了一个带有哈希码的对象 enter image description here

现在该对象是将要提交的内容的引用,但是如果我删除该对象 并运行git status,git仍将file1显示为已暂存,但实际上现在没有该对象的引用
enter image description here

file1仍然存在相同的更改,但实际上git无法提交该信息,因为未找到对象,但是为什么git仍将file1显示为已暂存或准备提交 enter image description here

这里git status的参考是什么?

1 个答案:

答案 0 :(得分:2)

据我所知,git statusgit diff命令运行两次的结果:

  1. git diff --cached:将当前(HEAD)提交与登台区域进行比较,并且

  2. git diff(无其他参数)会将登台区域与工作树进行比较。

我做过同样的事情(如您所做的),即修改了一个文件并删除了object目录的.git目录内的相应对象,然后运行了git-diff --cached --name-only,向我显示了文件名我已经修改了。

因此,即使您已删除目标文件,git status仍会向您显示暂存的文件,因为它正在寻找新创建的对象哈希以建立提交,因此它无法提交。 / p>

为了查看行为,这是我所做的:

  1. git diff-index --cached HEAD(将树与工作树或索引进行比较) enter image description here

  2. git ci -m 'bob' enter image description here

您可以看到git缓存中仍然存在修改后的对象哈希,而在进行git commit时,git寻找的是我先前删除的修改后的对象哈希,并且git抛出错误。