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

git add myfile.txt

我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?


当前回答

git add -A

用于将所有文件添加到您的承诺( 阶段) 。

git reset

是“ git 添加 - A” 命令的对面。它会删除所有要执行的分阶段文件( 手段已准备就绪 ) 。

类似地,要添加一个特定文件来承诺我们使用 Git 添加 < filename> 的方式相同, 在 unstage( 或重置) 上添加一个我们使用 git 添加的具体文件, 我们使用 git 重置 < filename > 。

git 重置与 git 添加完全相反 。

其他回答

更新2019年更新

正如其他人在相关问题中所指出的(见这里、这里、这里、这里、这里、这里、这里、这里和这里),你现在可以拆开一个单一文件:

git restore --staged <file>

并取消所有文件( 从回购根部) , 使用 :

git restore --staged .

Notes

git reformation于2019年7月推出,第2.23版发行,加上 " 级国旗 " ,它恢复了指数的内容(这里要求的内容)。

当 Git 状态与 saged uncommitted 文件同步运行时, Git 现在就建议用它来取消 page 文件( 而不是像 v2. 23 之前那样重置 Git 重置 HEAD < file > ) 。

还有一个互动模式:

git add -i

选择 选项 3 到 取消 添加文件 。 在我的情况中, 我通常要添加多个文件, 用交互模式, 您可以使用这样的数字来添加文件 。 这将除 4: 1, 1, 2, 3, 和 5 以外, 全部要用这个数字来添加文件 : 1, 2, 3 和 5

要选择一个序列, 只要类型 1-5 就可以从 1 到 5 全部取出 。

Git 中转文件

问题未明确提出。 原因是Git添加有两个含义:

将新文件添加到中转区, 然后用 git rm -- checked 文件撤消。 向中转区添加一个修改过的文件, 然后用 git 重置 HEAD 文件撤消 。

如果有疑问,使用

git reset HEAD file

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

警告: 如果您在已修改的文件上做了 git rm -- checked 文件( 之前在仓库中存在过的文件) , 文件将会在 git 承诺时被删除 ! 它将仍然存在于您的文件系统中, 但是如果有其他人拉动您的执行, 文件将会被从工作树上删除 。

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 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 2. 23 版本后使用此命令 :

git restore --staged <filename>

或者,你可以使用这个命令:

git reset HEAD <filename>