情况:我有一个Git存储库,其中的文件已经在索引中。我对几个文件进行了更改,打开Git并使用“ git add”将这些文件添加到我的暂存区中。
问题:如何从登台区域中删除这些文件之一,而不从索引中删除它或撤消对文件本身的更改?
情况:我有一个Git存储库,其中的文件已经在索引中。我对几个文件进行了更改,打开Git并使用“ git add”将这些文件添加到我的暂存区中。
问题:如何从登台区域中删除这些文件之一,而不从索引中删除它或撤消对文件本身的更改?
Answers:
如果我正确理解了这个问题,您只是想“撤消” git add
对该文件所做的操作。
如果您需要从暂存区中删除单个文件,请使用
git reset HEAD -- <file>
如果需要从暂存区中删除整个目录(文件夹),请使用
git reset HEAD -- <directoryName>
您的修改将被保留。运行时git status
,文件将再次显示为已修改但尚未上载。
有关详细信息,请参见git reset
手册页。
git rm --cached FILE
另一个答案建议的命令。
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset
我认为最好在这里使用,因为您可能会省略--chached选项,并使用以下git rm
命令快速感到沮丧:-) git reset
为了安全起见,如果您忘记添加“某些选项”,它将保留更改,以使其在日常使用中“更安全”(我在说git reset --hard
)。
git rm --cached FILE
分阶段删除文件,而不删除工作树中的文件。这与关于撤消的问题不同git add
。
git rm --cached
将导致文件从索引中删除,即该文件将成为未跟踪的文件。我认为这不是OP想要的。请参阅相关的线程在这里:stackoverflow.com/questions/45047810/...
你要:
影响单个文件
从临时区域删除文件
不从索引中删除单个文件
不要撤消更改本身
解决方案是
git reset HEAD file_name.ext
要么
git reset HEAD path/to/file/file_name.ext
完成后git status
,Git会告诉您如何取消登台:
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
如此git reset HEAD <file>
为我工作,而变化未受影响。
我想您可能对index的概念感到困惑,正如@CB Bailey所说:
暂存区域是索引。
您可以简单地将登台目录和索引视为同一件事。
因此,就像@Tim Henigan的答案一样,我猜:
您只想“撤消”
git add
为该文件完成的操作。
这是我的答案:
通常,有两种方法可以撤消舞台操作,如已经提到的其他答案:
git reset HEAD <file>
和
git rm --cached <file>
但是有什么区别呢?
假设该文件已经被暂存并且也存在于工作目录中,git rm --cached <file>
如果要从暂存目录中删除它,请使用,并将文件保留在工作目录中。但是请注意,如果您使用此操作,不仅会从登台目录中删除文件,还会将该文件标记为deleted
在登台目录中
git status
完成此操作后,您将看到:
deleted: <file>
这是从暂存目录中删除文件的记录。如果您不想保留该记录,而只是想撤消文件的前一阶段操作,请使用git reset HEAD <file>
改用。
--------答案结束--------
PS:我注意到提到了一些答案:
git checkout -- <file>
此命令适用于暂存文件但暂存后在工作目录中对其进行了修改的情况,请使用此操作从暂存目录恢复工作目录中的文件。换句话说,执行此操作后,更改将在您的工作目录中发生,而不是在登台目录中发生。
我的样本:
$ 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 checkout -- <file>
它非常适合从暂存区中删除文件