小编典典

“git rm --cached x”与“git reset head --”x”?

all

GitRef.org - 基本:

git rm将从暂存区域中删除条目。git reset HEAD这与“取消暂存”文件有点不同。“取消暂存”是指它将暂存区域恢复到我们开始修改之前的状态。 git rm另一方面,只是将文件完全踢出舞台,因此它不会包含在下一个提交快照中,从而有效地删除它。

默认情况下,agit rm file将从暂存区域中完全删除该文件,并从您的磁盘

(工作目录)中删除该文件。要将文件保留在工作目录中,您可以使用git rm --cached.

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


阅读 55

收藏
2022-08-17

共1个答案

小编典典

比如说,一个文件可以存在三个地方——(提交的)树、索引和工作副本。当您只是将文件添加到文件夹时,您就是将其添加到工作副本中。

当您执行类似的操作git add file时,将其添加到索引中。当你提交它时,你也将它添加到树中。

它可能会帮助您了解以下三个更常见的标志git reset

git 重置 [–<mode>] [ <commit>]

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

完全不触及索引文件或工作树(但将头部重置为<commit>,就像所有模式一样)。正如 git status
所说,这会使您所有更改的文件都“提交更改”。

--混合

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

- 难的

重置索引和工作树。此后对工作树中跟踪文件的任何更改<commit>都将被丢弃。

现在,当您执行类似的操作时git reset HEAD,您实际上正在做的是git reset HEAD --mixed,它将索引“重置”到您开始添加文件/添加对索引的修改之前的状态(通过git add)。在这种情况下,无论工作副本的状态是什么,您都没有对其进行任何更改,但是您以一种现在与树的 HEAD 同步的方式更改了索引。 是否git add用于暂存以前提交但已更改的文件,或添加新的(以前未跟踪git reset HEAD的)文件,与git add.

git rm另一方面,从工作目录和索引中删除一个文件,当您提交时,该文件也会从树中删除。git rm --cached但是,仅从索引中删除文件并将其保存在您的工作副本中。在这种情况下, 如果文件先前已提交, 那么您将索引与树的 HEAD 和工作副本
不同 ,这样 HEAD 现在具有文件的先前提交版本, 索引
在全部,并且工作副本具有它的最后修改。现在提交将同步索引和树,并且文件将从树中删除(使其在工作副本中未跟踪)。 何时git add用于添加新的(以前未跟踪的)文件,然后git rm --cached``git add与(并且几乎相同)完全相反git reset HEAD

Git 2.25 为这些情况引入了一个新命令git restore,但从 Git 2.28 开始,它在手册页中被描述为“实验性”,因为行为可能会改变。

2022-08-17