“git rm--缓存x”还是“git重置头x”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

GitRef.org-Basic:

git rm将从暂存区删除条目。这和git reset HEAD哪个“未处理”文件。我所说的“舞台外”指的是,它将舞台区域恢复到我们开始修改东西之前的状态。git rm另一方面,只是将文件从舞台上完全踢出,这样它就不包含在下一个提交快照中,从而有效地删除了它。 默认情况下,git rm file将文件从暂存区域中完全删除,并从磁盘>(工作目录)中删除。若要将文件留在工作目录中,可以使用git rm --cached...

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

提问于
用户回答回答于

例如,有三个地方可以使用文件--树、索引和工作副本。当只是将文件添加到文件夹时,将它添加到工作副本中。

当你做这样的事情git add file将其添加到索引中。当你提交它的时候,你也把它添加到树中。

它可能会帮助您了解git重置中的另外三个常见标志:

Git重置[-**]<mode>**][**<commit>**]此表单将当前分支头重置为<commit>并可能更新索引(将其重置为<commit>)和工作树(取决于<mode>,这必须是下列之一:-软根本不触及索引文件或工作树(但将头重置为<commit>,就像所有模式一样)。这将使您所有已更改的文件“要提交更改”,正如git状态所言。undefined-混合重置索引,但不设置工作树(即保留已更改的文件,但未标记为提交),并报告未更新的内容。这是默认操作。-艰苦重置索引和工作树。之后,对工作树中的跟踪文件进行的任何更改。<commit>都被丢弃了。

现在,当你做这样的事情git reset HEAD-你实际上在做的是git reset HEAD --mixed并且它将“重置”索引到它在开始添加文件/添加修改索引之前的状态(通过git add)在这种情况下,工作副本和索引(或暂存)是同步的,但是在重置之后,使头和索引保持同步。

git rm另一方面,从工作目录和索引中删除一个文件,当提交时,文件也会从树中删除。git rm --cached但是,仅从索引中删除该文件,并将其保存在工作副本中。这正好相反git add file在这种情况下,使索引与头和工作不同,其中Head具有以前提交的文件版本,工作副本从文件头中删除了LAS修改(如果有的话)或文件头中的内容。提交将同步索引和树,文件将被删除。

用户回答回答于

也许一个例子会有帮助:

git rm --cached asd
git commit -m "the file asd is gone from the repository"
git reset HEAD -- asd
git commit -m "the file asd remains in the repository"

请注意,如果你没有改变任何东西其他,第二次提交实际上不会做任何事情。

扫码关注云+社区