我在我当地的git repo中有一个README.md。本地git仓库没有任何阶段,工作树中没有任何变化。见下文:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
然后我运行git rm --cached -- README.md
,它说:
$ git rm --cached -- README.md
rm 'README.md'
根据git help rm
:
- 缓存
使用此选项可以停止并删除仅<索引的路径。无论是否修改了工作树文件,都将保持不变。
没有关于README.md的分阶段更改。因此,暂存区/索引应该不包含任何内容。为什么它仍然被移除?
根据@ DietrichEpp的回答:
就git而言,国家存在于3个地方:
Git通过比较1和2决定了un-tracked
或un-staged
的内容;
Git通过比较2和3确定了to-be-commited
的内容;
git reset
可用于更改1和/或2中的状态。
答案 0 :(得分:3)
索引不包含任何内容,它包含您要提交的内容,包括已经属于repo的文件。我们假设您运行以下命令:
touch a.txt b.txt
git add a.txt b.txt
git commit
git rm --cached a.txt
git commit
首次运行git add
时,它会将a.txt
和b.txt
添加到索引中。然后,git commit
获取索引中的任何内容并提交它。
索引仍然包含a.txt
和b.txt
。
当您git rm --cached
时,它会从索引中删除a.txt
,但b.txt
仍在索引中。然后,git commit
获取索引中的任何内容(仅b.txt
)并提交它。 a.txt
文件仍然存在,因为git rm --cached
没有触及实际文件,git commit
也没有。
因为第一次提交包含a.txt
而第二次提交没有,所以这显示为删除。
git status
的主要功能是向您显示索引与磁盘上实际文件之间的差异。因此,如果git status
为空,那么磁盘上所有未被忽略的文件也都在索引中。