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



根据git rm文档,它的行为如下:

从索引或工作树和索引中删除文件

如果我刚刚执行了一个提交,并且我的索引为空,那么执行git rm some_file将阶段删除some_file。我希望rm什么都不做。为什么要删除一个不存在的文件,对存储库的最终影响是什么?

这里的诀窍是,提交后索引不为空。

事实上,它准确地包含了提交之前和提交过程中的内容。

我不确定这个概念是从哪里来的。的确,git commit有一个拼写为--allow-empty的标志,这可能会使索引在这一点上看起来是空的,但标志的拼写有误导性:它允许的是空的diff,而不是空的commit

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

(另一个稍微奇怪的地方是,git rm还添加了一些内容:特别是,一条记录说"这个路径名,它确实存在于HEAD提交中,不应该存在于下一次提交中。"这是因为索引扮演着双重角色:它不仅仅是"下一次提交时要放什么",它还是一个缓存,可以加快git在工作树中的扫描速度。事实上,你可以完全删除索引文件,它会取消所有阶段,但不会安排任何删除时间:在这种情况下,git只是从HEAD提交中重新构建索引。)

最新更新