情况:我有一个Git存储库,索引中已经有文件。我修改了几个文件,打开Git,用“Git add”把这些文件添加到我的暂存区。

问:如何从暂存区删除其中一个文件,但不从索引中删除它,或撤消对文件本身的更改?


当前回答

我想你可能对索引的概念感到困惑,就像@CB Bailey评论的那样:

暂存区域是索引。

您可以简单地将暂存目录和索引看作是一回事。 所以,就像@Tim Henigan的回答一样,我想:

您只需“撤消”为该文件所做的git添加。

以下是我的回答:

通常,有两种方法来撤销一个阶段操作,正如前面提到的其他答案:

git reset HEAD <file>

and

git rm --cached <file>

但是有什么区别呢?

假设文件已经被暂存,并且存在于工作目录中,如果你想将它从暂存目录中删除,请使用git rm——cached <file>,并将文件保留在工作目录中。但是请注意,该操作不仅将从暂存目录中删除该文件,而且还将该文件标记为在暂存目录中已删除

git status

在这个操作之后,你会看到:

        deleted:    <file>

这是从暂存目录中删除文件的记录。如果你不想保留该记录,只是想撤销文件的前一阶段操作,请使用git reset HEAD <file>。

--------结束回答--------

PS:我注意到了一些回答:

Git checkout——<文件>

此命令适用于文件已经被暂存,但暂存后工作目录中的文件被修改的情况,使用此操作将暂存目录中的文件恢复到工作目录中。换句话说,在此操作之后,更改发生在您的工作目录中,而不是在登台目录中。

其他回答

Git checkout——<文件>

它完美地从暂存区删除文件

如果你想删除遵循某种模式的文件,并且你正在使用git rm——cached,你也可以使用file-glob模式。

在这里看到的。

您需要在文件的目录中,然后在终端中输入以下内容

git checkout -- <file>

要立即取消所有操作,运行此命令

git reset HEAD -- .

你想要的:

影响到单个文件 从暂存区删除文件 不能从索引中删除单个文件 不要撤消更改本身

答案是

git reset HEAD file_name.ext

or

git reset HEAD path/to/file/file_name.ext