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

git add myfile.txt

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


当前回答

还有一个互动模式:

git add -i

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

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

Git 中转文件

其他回答

只是类型git reset它将复返,犹如你从未打过字一样。git add .自从你最后一次承诺之后,你一定要保证你以前的承诺。

您想要 :

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你们不要毁灭任何物,如果我误译了它,

git add -A

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

git reset

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

同样,为了添加一个用于承诺的具体文件,我们使用git add <filename>相同的方式, to unstage( 或重置) 一个我们添加的具体文件git add我们使用git reset <filename> .

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

键入 :

git status

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

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

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

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

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

缩略git reset命令帮助您修改中转区域或中转区域以及工作树。 Git 的手工能力与您想要的完全一样,意味着有时需要取消对您所要的修改的修改git add.

你可以通过拨打电话来做到这一点git reset HEAD <file to change>。您有两种选择可以完全消除变化。git checkout HEAD <file(s) or path(s)>是一种快速的方法 来消除改变你的中转区和工作树的改变。

但是要小心这个命令, 因为它会消除你工作树上的所有变化。 Git 根本不知道这些变化, 因为他们从未被执行过。 一旦你执行这个命令, 就没有办法让这些变化回来 。

您可支配的另一个命令是git reset --hard。它同样会破坏您的工作树,任何未承诺的改变或分阶段的改变在运行后都会丢失。运行中git reset -hard HEAD做同样的事情git checkout HEAD。它只是不需要文件或工作路径。

您可以使用--softgit reset。它将存储库重新设置为您指定和分阶段进行所有这些修改的承诺。您已经进行的任何修改都不会受到影响,工作树上的修改也不会受到影响。

最终,你可以使用--mixed将工作树重置,不进行任何修改。这也将取消任何正在准备的修改。