0

我有一个问题:当我还没有提交时,我已经将文件添加到索引(阶段)命令

git rm --cached <file>  

正在完美地取消它。这里很明显我不能使用git reset,因为还没有 HEAD 提交。

但是当我提交一些文件时。我尝试执行git rm --cached以取消暂存修改过的文件(以前添加到索引),在这里执行时git status -s,我看到这个文件出现了两次(文件名 = index.php):

D index.php文件已被删除,这是正常的。
?? index.php 但为什么它出现两次,好像它没有被追踪?

PS:git reset是在提交后取消暂存文件。

4

1 回答 1

2

git rm --cached <file>从整个索引中删除一个文件。总是。如果HEAD提交中没有文件的版本,那么这实际上意味着该路径的索引匹配HEAD(没有任何内容;没有更改)但是如果HEAD提交中有文件的版本,那么这实际上是在进行删除文件。

无论哪种方式,索引中都没有该文件的版本,因此该文件变得“未跟踪”。git status(在实际进行提交删除的提交之前,您可能不会认为它未跟踪,但是当将工作树与索引进行比较以查看未暂存的更改时,它会被视为未跟踪。)

如果文件与模式不匹配,.gitignore则它将显示为未跟踪的文件。这是因为如果您指定--cached,git rm仅对索引进行操作,而不是对您的工作副本进行操作,因为它没有--cached,所以文件仍然存在于工作树中。

git reset <file>不取消暂存文件;它通过将版本恢复到索引中来取消对文件的更改。只是从索引中删除文件,即阶段删除文件。HEADgit rm --cached <file>

于 2013-05-03T20:04:25.097 回答