gitref.org-基本

git rm将删除舞台区域中的条目。这与git reset HEAD哪个"脱离阶段"文件。通过"脱离",我的意思是它将登台区域恢复到我们开始修改事物之前的阶段。git rm另一方面,只需将文件完全从舞台上踢出,以便将其包含在下一个提交快照中,从而有效地删除它。

默认情况下,git rm file将完全从登台区域中删除文件,也将从磁盘(工作目录)中删除文件。要将文件留在工作目录中,您可以使用git rm --cached

但是到底有什么区别git rm --cached asdgit reset head -- asd

答案

在三个地方,可以说一个文件可以是 - (承诺的)树,索引和工作副本。当您将文件添加到文件夹中时,您将其添加到工作副本中。

当你做类似的事情git add file您将其添加到索引中。当您提交时,也将其添加到树上。

它可能会帮助您了解其中的三个共同标志git reset

git reset [–<mode>] [<commit>]

此表格将当前的分支头重置为<commit>并可能更新索引(将其重置为<commit>)和工作树,具体取决于<mode>,这必须是以下之一:
–soft

根本不会触摸索引文件或根本不工作的树(而是将头重置为<commit>,就像所有模式一样)。正如GIT状态所说,这将使您所有更改的文件"要进行更改"。

–mixed

重置索引,而不是工作树(即保留更改的文件,但没有标记为提交),并报告尚未更新的内容。这是默认操作。

–hard

重置索引和工作树。自从工作树中跟踪文件的任何更改以来<commit>被丢弃。

现在,当您做类似的事情时git reset HEAD,您实际在做的是git reset HEAD --mixed它将"重置"到您开始添加文件 /添加修改为索引之前的状态(通过git add)。在这种情况下,无论工作副本的状态是什么,您都不会单点更改它,但是您以现在与树头同步的方式更改了索引。Whether git add was used to stage a previously committed but changed file, or to add a new (previously untracked) file, git reset HEAD is the exact opposite of git add.

git rm另一方面,从工作目录和索引中删除文件,当您提交时,该文件也将从树中删除。git rm --cached但是,仅将文件单独从索引中删除,并将其保存在工作副本中。在这种情况下,如果文件以前是提交的, 然后,您将索引成为不同的 从树的头和工作副本中no 完全文件,工作副本对其进行了最后修改。现在,提交将同步索引和树,并将文件从树中删除(在工作副本中未跟踪)。When git add was used to add a new (previously untracked) file, then git rm --cached is the exact opposite of git add (and is pretty much identical to git reset HEAD).

git 2.25引入了针对这些情况的新命令,git restore,但是从Git 2.28开始,它在人页面中被描述为"实验性",因为行为可能会改变。

来自: stackoverflow.com