Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我的暂存索引为空,为什么“git rm”要删除一个非';不在那里吗?_Git_Git Rm_Git Index - Fatal编程技术网

如果我的暂存索引为空,为什么“git rm”要删除一个非';不在那里吗?

如果我的暂存索引为空,为什么“git rm”要删除一个非';不在那里吗?,git,git-rm,git-index,Git,Git Rm,Git Index,根据git rm文档,它的行为如下: 从索引或工作树和索引中删除文件 如果我刚刚做了一个提交,并且我的索引为空,那么执行git rm some_file将阶段性地删除some_file。我希望rm什么也不做。为什么要删除一个不存在的文件?对存储库的最终影响是什么?这里的技巧是提交后索引不是空的 事实上,它完全包含提交之前和提交期间的内容 我不知道这个概念从何而来。确实,git commit有一个拼写为--allow empty的标志,这可能会使索引在此时看起来是空的,但该标志的拼写有误导性:它允

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

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


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

这里的技巧是提交后索引不是空的

事实上,它完全包含提交之前和提交期间的内容

我不知道这个概念从何而来。确实,
git commit
有一个拼写为
--allow empty
的标志,这可能会使索引在此时看起来是空的,但该标志的拼写有误导性:它允许的是空的diff,而不是空的commit

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

(另一个稍微奇怪的地方是,
git rm
还添加了一些内容:特别是,一条记录说“这个路径名,它确实存在于
头中,不应该存在于下一次提交中。”这是因为索引起着双重作用:它不仅仅是“在下一次提交中放置什么”,还有一个缓存,可以加快git在工作树中的扫描速度。事实上,您可以完全删除索引文件,这会对所有内容进行转储,但不会安排任何内容进行删除:git只是从
头重新构建索引(在本例中为
提交)。

您说“我不确定这个概念从何而来”。我认为它来自这样的陈述:“索引是您提议的下一次提交”(from)。在一次提交之后,我没有任何关于下一次提交的建议,因此我希望索引为空。然而,这篇文章接着解释说,“Git用最后签出到工作目录中的所有文件内容以及它们最初签出时的样子的列表填充[索引]”