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

git add myfile.txt

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


当前回答

如上文所述,从中转区删除新文件(仅在出现新文件的情况下):

git rm --cached FILE

使用 rm -- -- 刻录仅用于新文件不小心添加 。

其他回答

根据其他许多答案,你可以使用git reset

不过:

我发现这个小小小文章, 实际上增加了Git 命令(别名),git unadd:见git 取消添加详细信息或... 。

简而言之

git config --global alias.unadd "reset HEAD"

现在你可以

git unadd foo.txt bar.txt

或/直接:

git reset HEAD foo.txt bar.txt

如果您想要还原最后一个任务, 但仍要保留在任务中本地作出的更改, 请使用此命令 :

git reset HEAD~1 --mixed

使用使用git add -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)
$

您想要 :

git rm --cached <added_file_to_undo>

理由:

当我刚开始做这个的时候,我第一次尝试

git reset .

(取消我最初添加的全部内容), 只是为了得到这个(不是这样的)有用信息:

fatal: Failed to resolve 'HEAD' as a valid ref.

结果发现,这是因为 HEAD ref (blanch?) 直到第一次承诺之后才存在。 这就是说,你会遇到跟我一样的初学者的问题, 如果你的工作流程像我的一样, 像是:

  1. Cd 我伟大的新项目目录 试探Git, 新的热度
  2. git init
  3. git add .
  4. git status

    ...很多垃圾卷轴 通过...

    该死,我不想加上这些

  5. google “ 未跳过 git 添加 ”

    找到堆叠溢出

  6. git reset .

    致命: 解决“ HEAD” 有效参考失败 。

更进一步发现a 窃听器记录与邮件列表中的无益对比。

正确的解决方案就在 Git 状态输出中( 是的, 我将它伪装成“ 废话 ” ) 。

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

解决的确是使用git rm --cached FILE.

请注意这里其他地方的警告-git rm删除本地文件的工作副本,但使用-- -- cooked。以下是git help rm:

--cached 使用此选项来卸载和从索引中删除路径。 工作树文件, 不论是否修改, 都会被左移 。

我开始使用

git rm --cached .

把所有东西都搬走,重新开始。虽然没有成功,因为当add .循环,结果rm需要满足的需求-r来重复。 叹气 。

git rm -r --cached .

好了,现在我回到我开始的地方 下次我再用-n以进行一个干燥的运行,然后观察将要增加什么:

git add -n .

在信任之前,我把所有东西都拉到一个安全的地方git help rm关于 The 的--cached你们不要毁灭任何物,如果我误译了它,

您可以使用g基基边命令或图形用户界面 Git 。

单个文件

git reset File.txt

多个文件

git reset File1.txt File2.txt File3.txt

示例示例示例示例

假设你添加了Home.js 居家公居, 项目表.js, 最新情况.js犯错,

Enter image description here

并要撤消/重置

git reset src/components/home/Home.js src/components/listItem/ListItem.js src/components/update/Update.js

Enter image description here

同一例子使用Git 图形界面

git gui

打开窗口。不检查您的文件分阶段变化(将承诺)

Enter image description here