如何从git临时区域中删除文件?

ome*_*ega 456 git

我在我的本地仓库中对我的一些文件进行了更改,然后我做git add -A了我认为在暂存区域添加了太多文件的情况.如何从暂存区域删除所有文件?

在我这样做之后,我会手动做git add "filename".

Ash*_*son 579

您可以使用索引从索引中取消暂存文件

git reset HEAD -- path/to/file
Run Code Online (Sandbox Code Playgroud)

就像git add,您可以通过目录等递归取消暂存文件,因此要立即取消暂存所有内容,请从存储库的根目录运行:

git reset HEAD -- .
Run Code Online (Sandbox Code Playgroud)

此外,为了将来参考,输出git status将告诉您运行将文件从一个状态移动到另一个状态所需的命令.

  • git reset HEAD - 很好的enoght.不需要点 (15认同)
  • @AntonyHatchkins` @`是`HEAD`的同义词. (7认同)
  • `$ git reset HEAD - .`产生`致命:无法将'HEAD'解析为有效的ref.注意我从未做过任何提交; 它是`git init`之后的第一个`git add` (5认同)
  • 你也可以使用`git reset @`. (4认同)
  • git reset 和 git Restore --staged 哪个更好 (3认同)
  • @alex 比简单的`git reset`好吗? (2认同)

Ant*_*ins 279

使用

git reset
Run Code Online (Sandbox Code Playgroud)

取消暂存所有暂存的文件.

  • @ProNotion抱歉,我误解了你.`git reset HEAD - .`的不同之处在于它只重置当前目录及下面的文件,而`git reset`重置项目中的所有文件. (8认同)
  • @ProNotion Reset 默认使用 `HEAD`。你的 `git reset HEAD --` 中那些 `--` 的目的是什么? (5认同)
  • 我可以问一下这与`git reset HEAD - 这有什么不同,还是只是一种更简洁的方式来执行相同的操作? (3认同)
  • @AntonyHatchkins 它后面应该有一个句号(句号),并取自已接受答案中的示例。 (3认同)

Max*_*Max 91

如果你已经提交了一堆不需要的文件,你可以取消它们告诉git将它们标记为已删除(实际上不删除它们)

git rm --cached -r .
Run Code Online (Sandbox Code Playgroud)

--cached告诉它从登台和索引中删除路径而不删除文件本身并-r递归地对目录进行操作.然后git add,您可以继续跟踪任何文件.

  • 我在这样的单个文件上尝试了此操作:“ git rm --cached my / file.java”,我看到该文件仍在暂存区域中,但已删除!@Max运行此命令时,您的文件实际上是被删除还是未暂存?如果您不寻找这种行为,我会给出答案。 (2认同)
  • @OrwellHindenberg 感谢您指出这一点!`--cached` 实际上是停止跟踪您已经提交的文件。所以该文件实际上并没有被删除,但 git 认为它被删除了。我已经在我的回答中澄清了这一点。 (2认同)

Niv*_*han 51

大大简化的答案(git v2.23 及更高版本)

下面的 git 命令将从暂存区域中删除所有文件

git restore --staged .
Run Code Online (Sandbox Code Playgroud)

或者简单地你可以

git restore -S .
Run Code Online (Sandbox Code Playgroud)

注意:从您的项目运行这些命令root directory,不要忘记.末尾的(点)!


nor*_*xxx 44

现在在 v2.24.0 建议

git restore --staged .
Run Code Online (Sandbox Code Playgroud)

取消暂存文件。

  • 这是 git 本身推荐的取消暂存文件的方法 (13认同)
  • 谁能验证或解释一下胡兮兮上面的注释:“没有分支”? (2认同)

Sha*_*had 29

你可以用

git reset HEAD
Run Code Online (Sandbox Code Playgroud)

然后添加所需的特定文件

git add [directory/]filename
Run Code Online (Sandbox Code Playgroud)

  • OP询问有关取消暂存文件的问题.你建议他删除这些文件.我建议你在回答之前阅读暂存区域. (11认同)
  • 请注意,`git clean -df`将永久删除文件.在类UNIX系统上,它将调用`unlink()`,并且您删除的文件将无法恢复. (5认同)

Aka*_*iya 16

从暂存区删除所有文件使用 -
git reset
删除特定文件使用 -
git reset "File path"

  • 感谢您提供节省时间的提示,我可以仅删除其中一个文件 (2认同)

San*_*ick 15

使用以下命令从暂存区删除特定文件:

git restore --staged <individual_file>
Run Code Online (Sandbox Code Playgroud)

或者使用以下命令删除当前暂存的所有文件:

git restore --staged .
Run Code Online (Sandbox Code Playgroud)

在将文件添加到暂存区后,在您的 git bash 终端中,您可以运行 agit status并在当前暂存文件上方为您显示该命令: 在此处输入图片说明


小智 11

这很简单:

  1. 要检查当前目录中任何文件的当前状态,是否已暂存:

    git status

  2. 暂存任何文件:

    git add . 对于当前目录中的所有文件

    git add <filename> 对于特定文件

  3. 取消暂存文件:

    git restore --staged <filename>


Dan*_*ark 7

如其他答案中所述,您应该使用git reset.这将取消该动作git add -A.

注意: git reset等同git reset --mixed于此

重置索引但不重置工作树(即保留更改的文件但未标记为提交)并报告尚未更新的内容.这是默认操作.[ git reset ]

  • ..并从暂存区域中删除*single*文件,您可以执行`git reset filenameToNotCommit` (2认同)

Vla*_*den 7

如果不需要的文件被添加到暂存区但尚未提交,那么简单的重置就可以完成这项工作:

$ git reset HEAD file
# Or everything
$ git reset HEAD .
Run Code Online (Sandbox Code Playgroud)

要仅删除当前工作目录中未暂存的更改,请使用:

git checkout -- .
Run Code Online (Sandbox Code Playgroud)


Aji*_*ith 5

使用

git reset HEAD
Run Code Online (Sandbox Code Playgroud)

这将从暂存区域中删除所有文件