我使用命令错误地将文件添加到 Git :

git add myfile.txt

我还没跑呢git commit。我如何撤销这些修改,使这些修改不包含在承诺中?


当前回答

撤消撤消git add用于未承诺更改的更改 :

git reset <file>

这将将文件从当前索引( “ 即将被承诺” 列表) 中删除, 而不更改其它内容 。


取消所有文件的所有更改 :

git reset

在旧的 Git 版本中,上述命令相当于git reset HEAD <file>git reset HEAD或将失效,如果HEAD未定义(因为你尚未在仓库中做出任何承诺)或模糊(因为你创建了一个分支,称为:HEAD这是你不该做的蠢事在Git 1.8.2中更改。,所以在现代版本的 Git 中,你可以使用上面的命令,甚至在你第一次做出承诺之前:

当您在历史中没有任何承诺时, “ 将重置” (没有选项或参数) 用于错误退出, 但它现在给了您一个空索引( 匹配不存在的重置, 您甚至没有在 ) 。

文 件:git 重设

其他回答

问题未明确提出,原因是:git add有两个含义:

  1. 添加 a新文件到集结区,然后撤消git rm --cached file.
  2. 添加 a修改后撤消区域文件,然后用git reset HEAD file.

如果有疑问,使用

git reset HEAD file

因为它在两种情况下都做了预期的事

警告 :如果有的话git rm --cached file档案中修改后(一个之前在存储库中存在的文件) , 然后文件将会在git commit! 它将仍然存在于您的文件系统中, 但是如果有其他人拉动您的承诺, 文件将会从他们的工作树上删除 。

git status将会告诉你,如果文件是新文件修改后:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   my_new_file.txt
    modified:   my_modified_file.txt

我会用git restore --staged .git restore --staged <filename>

您也可以使用git rm --cached然而,git rm命令应最好用于已跟踪的文件 。

请注意,如果您没有指定修改,则必须包含一个分隔符。例如,我的控制台:

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M    <path_to_file>

(1.7.5.4版总版)

使用*命令一次处理多个文件 :

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

键入 :

git status

Git会告诉你什么是舞台,等等, 包括关于如何解除舞台的指示:

use "git reset HEAD <file>..." to unstage

我发现吉特做的相当不错 裸体我做正确的事情 在这样的情况下。

注:最近Git版本(1.8.4.x)更改了此电文:

(use "git rm --cached <file>..." to unstage)