【问题标题】:git rm --cached and 'deleted' statusgit rm --cached 和“已删除”状态
【发布时间】:2013-03-16 22:54:45
【问题描述】:

我想知道为什么这样做:

git add <file>

然后,我会这样做:

git rm --cached <file>

文件在舞台区域中保持已删除状态。

这里是例子:

只是在寻找有关文件“已删除”状态的解释。

谢谢

【问题讨论】:

  • 您必须git commit 更改才能在存储库中生效。这样,您可以取消操作(如果您改变主意等)。它基本上列出了您在提交到 repo 之前对工作副本所做的更改(在本例中为 rm 命令)。
  • 通常green 颜色表示对索引/阶段所做的更改。因此,根据您的解释,我必须理解 deleted 状态反映了在索引/阶段上完成了 delete 。这有点奇怪,但有道理。

标签: git msysgit


【解决方案1】:

试试git reset HEAD yourFile,而不是git rm --cached

混合重置将从索引中删除您的文件,而不会将其从工作树中删除。
请参阅“Undo 'git add' before commit”。

在您的情况下,git stash 需要git reset 之前,然后git stash pop 将在重置后恢复您正在进行的更改。


关于git rm --cached 之后的“deleted”状态,该命令在索引中注册文件的删除,这就是为什么您看到它记录为“已删除”以用于下一次提交。

OP Ferpegainsists:

我在问为什么git rm --cached 会导致删除状态,因为这个命令应该具有与git reset HEAD &lt;file&gt; 相同的行为,正如您在git rm 中看到的那样。

嗯,不,git rm 与 [git reset][8] 的行为不同。
两者都会影响索引,但是:

  • 一个(git rm)将在下一次提交时记录一个文件以供删除,因此状态为“deleted”,
  • 另一个 (git reset) 将 HEAD 复制到索引,将所述索引重置回 HEAD 中的文件。

【讨论】:

  • Git reset 删除我对文件工作目录的更改。我不想放弃我的文件修改。我想取消暂存文件。所以我必须做的就是我正在做的事情。我只需要deletedstatus 的解释。
  • 我在“git reset”之前测试了git stash,之后测试了git stash pop,它不会从舞台上删除文件。在三个命令结束时,所有内容都保持在git add 命令之后。
  • @Ferpega 但是状态应该是 before git add,显示修改not为提交暂存..跨度>
【解决方案2】:

您将文件添加到索引/缓存中(屏幕截图中的绿色)并告诉 get 您要删除该文件。索引/缓存更改仅在提交完成时执行。

我认为您可能将文件放在索引/缓存中,然后想将其删除(因此不会被提交)。

执行此操作的命令在git status 给您的消息中(在带圆圈的deleted 正上方。

git reset HEAD <filename>

【讨论】:

  • 嗨@David_Culp 是的,git reset HEAD &lt;filename&gt; 按照你说的做,我可以使用该命令获得相同的结果。但我并不是要求做某事。我在问为什么deleted 状态是git rm --cached 的结果,因为这个命令应该具有与git reset HEAD &lt;file&gt; 相同的行为,如您所见:git-scm.com/docs/git-rm 但它添加了另一个您必须commit 到的中间结果得到最终结果。
  • @Ferpega git rm --cached 的行为与 git reset 不同,请参阅我编辑的答案。
猜你喜欢
  • 2017-12-16
  • 2014-05-02
  • 2012-09-15
  • 2015-05-16
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 2011-05-07
  • 2011-08-13
相关资源
最近更新 更多