【问题标题】:Undo “git add <dir>”?撤消“git add <dir>”?
【发布时间】:2011-06-06 01:29:32
【问题描述】:

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

我试过git reset dir,但没用。显然git reset file 是撤消它的方法。但是我的文件太多,时间太少了。

【问题讨论】:

  • git reset &lt;path&gt; 更新该路径的索引,使其匹配HEAD(当前提交)。它不会触及工作树。

标签: git git-reset


【解决方案1】:

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

git rm <strong>--cached -r</strong> dir

--cached 开关使git rm 仅对索引进行操作,而不接触工作副本。 -r 开关使其递归。

【讨论】:

  • “从索引中删除整个暂存目录”将是对 git 命令的更好解释,因为对于像我这样的 git 初学者来说,该命令看起来非常像它甚至可以删除目录文件系统。只是口味问题。
  • 这就是我将--cached 开关加粗的原因。不过,我已经编辑了答案以限定它仅适用于索引。
  • @SaschaGottfried 谢谢你的澄清,一开始我很害怕,即使编辑了,但你的评论说得很清楚:)
  • 我几乎删除了我的整个文件夹 :S 在此之后...做一个git reset HEAD folder 修复了一切...但在这样做之前,做一个git status folder,并确保它说它'删除'该文件夹中的所有文件
【解决方案2】:

你会想要使用git rm --cached -r &lt;dir&gt;。此命令将从索引中删除暂存目录的内容。

如果该目录已被跟踪,您必须手动查找新旧文件并取消暂存它们...

之后可能运行git reset &lt;dir&gt; 以重置目录中现有(和已跟踪的)文件。


2019 年更新:

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

【讨论】:

  • git reset &lt;dir&gt; 一个人还不够吗?
  • @Bananach 我刚刚尝试过,似乎git reset &lt;dir&gt; 也可以。答案来自 2011 年,所以我不确定这在 8 年前是否已经奏效。我会更新答案。感谢您的提示!
【解决方案3】:

取消暂存目录

$ git reset <dir>

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

$ git add <dir>

确认目录未暂存

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

$ git status

$ git diff --staged --name-only 

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

【讨论】:

    【解决方案4】:

    使用findxargs

    find dir -type f | xargs git reset
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2015-03-16
        • 2011-05-28
        • 2012-08-21
        • 2010-09-25
        • 2017-09-03
        • 2012-12-14
        相关资源
        最近更新 更多