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

git add myfile.txt

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


当前回答

我将使用 git 恢复 -- paged. 或 git 恢复 -- paged < filename >

您也可以使用 git rm -- ccared, 但是, git rm 命令最好用于已经跟踪的文件 。

其他回答

git add -A

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

git reset

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

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

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

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

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

问题未明确提出。 原因是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 添加 - i 来从您即将做出的承诺中删除仅添加的文件。 例如 :

添加您不想添加的文件 :

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

进入交互式添加以取消您的添加( 这里输入的 git 命令是“ r”( revert) , “ 1”( 列表返回显示的第一个条目) , “ return” 退出返回模式, 以及“ q” ( quit) :

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

这就是你的证据 证明"foo"又回到了未追踪的名单上

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$

假设我创造了一个新的文件, 新的File. txt :

假设我无意中添加文件, git 添加新的File. txt :

现在我要撤销此添加, 在承诺前, git 重置新文件。 txt :