我想知道为什么当我执行以下操作时:
git add <file>
然后,在那之后,我执行:
git rm --cached <file>
文件仍处于删除状态,位于阶段区域。
这是一个例子:
我只想了解文件的“已删除”状态。
谢谢。
尝试使用 git reset HEAD yourFile
,而不是 git rm --cached
。
混合重置将从索引中删除文件,而不会从工作树中删除文件。
请参见“撤消提交前的'git add'”。
在您的情况下,需要在 git reset
之前使用 git stash
,然后使用 git stash pop
在重置后恢复正在进行的更改。
关于git rm --cached
后 'deleted
' 状态的问题,该命令将文件的删除注册到索引中,因此您会看到它记录为下一次提交的 'deleted'。
我问为什么通过
git rm --cached
的结果是 'deleted',因为这个命令的行为应该与git reset HEAD <file>
相同,就像你在git rm
中看到的一样。
好吧,不是的,git rm
没有与 [git reset][8]
相同的行为。
两者都会影响索引,但:
git rm
)会在下一次提交时记录文件被删除的操作,因此状态为'deleted
'。git reset
)会将HEAD复制到索引(index),将索引重置为HEAD中的文件内容。git stash
,然后再使用git stash pop
,但它并不会将文件从暂存区中移除。在这三个命令执行完毕后,所有的东西都和执行git add
命令之后一样。 - ferpegagit add
前一样,显示修改内容 未 准备提交。 - VonCgit status
给出的消息中(在圆圈中的deleted
上方)。git reset HEAD <filename>
git reset HEAD <filename>
确实可以做到你说的事情,我可以使用该命令来获得相同的结果。但我不是在要求执行某些操作。我想知道为什么git rm --cached
会导致deleted
状态存在,因为这个命令应该与git reset HEAD <file>
具有相同的行为,正如您在此处所见:http://git-scm.com/docs/git-rm,但它添加了另一个中间结果,您必须`commit`才能获得最终结果。 - ferpegagit rm --cached
的行为与 git reset
不同,请参见我的编辑答案。 - VonC
git commit
命令,才能使更改生效并提交到代码库。这样,如果你改变主意等情况,就可以取消暂存操作。基本上,它会列出你在工作副本中所做的更改(在这种情况下是rm
命令),然后再将其提交到代码库。 - Chris绿色
表示对索引/暂存区进行的更改。因此,通过你的解释,我必须理解已删除
的状态反映了在索引/暂存区上执行的 删除 操作。这有点奇怪,但也是有意义的。 - ferpega