情况:我有一个Git存储库,索引中已经有文件。我修改了几个文件,打开Git,用“Git add”把这些文件添加到我的暂存区。
问:如何从暂存区删除其中一个文件,但不从索引中删除它,或撤消对文件本身的更改?
情况:我有一个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重置<文件>
无论您是否有任何以前的提交。
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset filename.txt
如果在filename.txt中有修改,则是您错误地将其添加到stage,并且希望从staging中删除该文件,但又不想丢失所做的更改。
我的示例:
$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: ShopBack/Source/Date+Extension.swift
modified: ShopBack/Source/InboxData.swift
modified: ShopBack/en.lproj/Localizable.strings
你们可能注意到了
> Changes to be committed:
> (use "git reset HEAD <file>..." to unstage)
如果您只是想删除文件更改的子集,您可以使用:
git reset -p
or
git reset -p <file_name>
这个命令基本上与git add -p相反:它只会从暂存区域删除所选的更改。我发现它在“删除”我错误添加的东西时非常有用。