根据git rm
文档,这就是它的行为方式:
从索引或工作树和索引
中删除文件
如果我刚刚进行了提交且索引为空,则执行git rm some_file
将删除some_file
。我希望rm
不做任何事情。为什么删除不存在的文件以及对存储库的最终影响是什么?
答案 0 :(得分:2)
这里的诀窍是提交后索引不是。
事实上,它包含了它在提交之前和之前的确切内容。
我不确定这个概念来自哪里。确实git commit
有一个拼写为--allow-empty
的标志,这可能使得此时索引看起来是空的,但它是误导的标志的拼写:它允许的是一个空的< em> diff ,而不是空提交。
git add
向索引添加新内容也是正确的,但是对于已经存在的文件,添加的新内容只是取代已经存在的旧条目。 (也许git add
的拼写导致人们认为提交后索引是空的?)
(另一个有点奇怪的是git rm
也增加了一些东西:具体来说,一条记录说“这个路径名,确实存在于HEAD
提交中,不应该存在于下一次提交。“这是因为索引扮演双重角色:它不是只是”下一次提交中要放什么“,而且还有一个缓存来加速git扫描你的工作树。你实际上可以完全删除索引文件,它会解除所有内容,但不会安排任何删除:git只是在这种情况下从HEAD
提交重新构建索引。)