如果我的暂存索引为空,为什么`git rm`删除不存在的文件?

时间:2015-12-08 23:04:52

标签: git git-rm git-index

根据git rm文档,这就是它的行为方式:

  

从索引或工作树和索引

中删除文件

如果我刚刚进行了提交且索引为空,则执行git rm some_file将删除some_file。我希望rm不做任何事情。为什么删除不存在的文件以及对存储库的最终影响是什么?

1 个答案:

答案 0 :(得分:2)

这里的诀窍是提交后索引不是

事实上,它包含了它在提交之前和之前的确切内容。

我不确定这个概念来自哪里。确实git commit有一个拼写为--allow-empty的标志,这可能使得此时索引看起来是空的,但它是误导的标志的拼写:它允许的是一个空的< em> diff ,而不是空提交

git add向索引添加新内容也是正确的,但是对于已经存在的文件,添加的新内容只是取代已经存在的旧条目。 (也许git add的拼写导致人们认为提交后索引是空的?)

(另一个有点奇怪的是git rm也增加了一些东西:具体来说,一条记录说“这个路径名,确实存在于HEAD提交中,不应该存在于下一次提交。“这是因为索引扮演双重角色:它不是只是”下一次提交中要放什么“,而且还有一个缓存来加速git扫描你的工作树。你实际上可以完全删除索引文件,它会解除所有内容,但不会安排任何删除:git只是在这种情况下从HEAD提交重新构建索引。)