撤消“ git add <dir>”?


186

我使用命令“ git add dir”错误地添加了文件。我尚未运行“ git commit”。有没有办法从提交中删除此目录及其中包含的所有内容?

我已经尝试过git reset dir,但是没有用。显然git reset file是撤销它的方法。但是我的文件太多了,时间却很少。


6
git reset <path>更新该路径的索引,使其匹配HEAD(当前提交)。它不会碰到工作树。
卡斯卡贝尔2011年

Answers:


279

要从索引中删除目录及其中的所有内容,

git rm --cached -r dir

--cached开关使git rm该指数操作,而不是触摸工作副本。该-r开关使其递归。


12
“从索引中删除整个暂存目录”将是对git命令的更好解释,因为对于像我这样的git初学者来说,该命令看起来非常像它甚至可以删除文件系统上的目录。只是口味问题。
2013年

1
这就是为什么我将--cached开关加粗了。不过,我已经编辑了答案以限定它仅适用于索引。
亚里斯多德·帕加尔兹

@SaschaGottfried感谢您的澄清,即使编辑后我还是很害怕,但是您的评论很清楚:)
Max von Hippel

在此之后,我几乎删除了整个文件夹:S ...进行了git reset HEAD folder固定的所有操作...,但是在执行此操作之前,请执行一次git status folder,并确保它说“删除”了该文件夹中的所有文件
Bengalaa

21

您将要使用git rm --cached -r <dir>。此命令将从索引中删除暂存目录的内容。

如果已经跟踪目录,则必须手动查找新文件和旧文件,然后取消暂存它们…

可能git reset <dir>在那之后运行,以重置目录中现有的(已经跟踪的)文件。


更新2019:

只需运行git reset directory,它将取消登台所有新添加的文件。


git reset <dir>单单够吗?
巴纳纳赫

@Bananach我刚刚尝试过,似乎可以git reset <dir>。答案是从2011年开始的,所以我不确定8年前是否已经奏效。我将更新答案。感谢您的提示!
knittl


11

下级目录

$ git reset <dir>

取消暂存我暂存的所有文件和文件夹:

$ git add <dir>

确认目录已暂存

为了确认从暂存中删除了目录及其内容(即“要更改的更改”),请运行以下命令:

$ git status

要么

$ git diff --staged --name-only 

确认先前暂存的文件夹或文件均未暂存。


2

删除尚未提交的暂存文件/文件夹的一个简单命令是- git restore --staged <dir>

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.