0

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

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

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

4

1 回答 1

2

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

事实上,它包含了它在提交之前和期间所拥有的内容。

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

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

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

于 2015-12-08T23:24:42.660 回答