编辑这个问题可以从两个方面来理解,两种情况下的最佳答案是不同的。
- 问题1:我将一个以前未跟踪的文件添加到暂存区。如何在不将此文件从文件系统中删除的情况下将其从临时区域中删除?
答案1:使用以下命令,如John Feminella's answer中所述:
git rm --cached <file>
- 问题2:我修改了一个已跟踪的文件,并将修改添加到暂存区。如何从临时区域中删除修改?也就是说,我如何在文件中取消暂存我的修改?
答案2:使用以下命令,如David Underhill's answer中所述:
git reset <file>
7条答案
按热度按时间ccrfmcuu1#
您需要:
如果省略
--cached
选项,它也会从工作树中删除它。git rm
比git reset
稍微安全一点,因为如果暂存的内容与分支的提示或磁盘上的文件不匹配,您会收到警告。(如果没有,则必须添加--force
。)5anewei62#
这将为您取消暂存a(而不删除或以其他方式修改文件):
qv7cva1a3#
用于从索引中移除特定文件。
和
git reset HEAD
用于删除所有索引文件。
yks3o0rb4#
仅使用
git rm --cached [file]
从索引中删除文件。git reset <filename>
可用于从索引中删除添加的文件,因为这些文件从未提交。注意:
git reset First.txt
在提交后对index没有影响。这就引出了
git restore --staged <file>
的主题。它可以用来(大概在第一次提交之后)从索引中删除添加的文件,因为这些文件是从未提交的。tl;dr查看最后15行。如果你不想被混淆为第一次提交,第二次提交,提交前,提交后…始终使用
git rm --cached [file]
smdncfj35#
根据我的拙见和我使用git的工作经验,staging area和index是不一样的。当然,我可能是错的,但正如我所说的,我使用git的经验和我的逻辑告诉我,索引是一种结构,它遵循你对工作区(本地存储库)的更改,这些更改不会被忽略设置和暂存区所排除,它是为了保存已经确认要提交的文件,也就是运行add命令的索引中的文件。您没有注意到并意识到这一“细微”差异,因为您使用
git commit -a -m "comment"
将索引和缓存文件添加到暂存区域,并在一个命令中提交,或者使用IDEA等IDE进行提交。而缓存就是在索引文件中保存更改的东西。如果要从以前未添加到临时区域的索引中删除文件,则之前建议的选项适合您,但是...如果您已经这样做了,您将需要使用别问我10年前在哪里...我想念你,这个答案是为了更远的世代)
qv7cva1a6#
根据您的工作流程,这可能是您很少需要的东西,因此尝试找出命令行解决方案没有什么意义(除非您出于某种原因碰巧在没有图形界面的情况下工作)。
只需使用一个支持索引管理的基于GUI的工具,例如:
git gui
<--使用Tk窗口框架--类似于gitk
git cola
<--更现代风格的GUI界面这些选项允许您通过点击将文件移入或移出索引。它们甚至支持在索引中选择和移动文件的一部分(单独的更改)。
换个Angular 看:如果你在使用建议的、相当隐晦的命令时搞砸了:
git rm --cached [file]
git reset HEAD <file>
...您真实的可能会丢失数据-或者至少很难找到数据。除非您真的需要非常频繁地执行此操作,否则使用GUI工具可能更安全。
无索引工作
根据评论和投票,我意识到很多人一直在使用索引。我不知道。我告诉你怎么做:
git commit -a
git commit (list of files)
git commit -a
然后通过git gui
* 修改 *git difftool --dir-diff --tool=meld
gg0vcinb7#
git rm --cached -r .
用于从临时区域中删除所有文件