我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
当前回答
您想要 :
git rm --cached <added_file_to_undo>
理由:
当我刚开始做这个的时候,我第一次尝试
git reset .
(取消我最初添加的全部内容), 只是为了得到这个(不是这样的)有用信息:
fatal: Failed to resolve 'HEAD' as a valid ref.
结果发现,这是因为 HEAD ref (blanch?) 直到第一次承诺之后才存在。 这就是说,你会遇到跟我一样的初学者的问题, 如果你的工作流程像我的一样, 像是:
git init
git add .
git status
...很多垃圾卷轴 通过...
该死,我不想加上这些
google “ 未跳过 git 添加 ”
找到堆叠溢出
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 -i
选择 选项 3 到 取消 添加文件 。 在我的情况中, 我通常要添加多个文件, 用交互模式, 您可以使用这样的数字来添加文件 。 这将除 4: 1, 1, 2, 3, 和 5 以外, 全部要用这个数字来添加文件 : 1, 2, 3 和 5
要选择一个序列, 只要类型 1-5 就可以从 1 到 5 全部取出 。
请注意,如果您没有指定修改,则必须包含一个分隔符。例如,我的控制台:
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
不过:
我发现这个小小小文章, 实际上增加了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 rm --cached FILE
使用 rm -- -- 刻录仅用于新文件不小心添加 。
正如其他人在相关问题中所指出的(见A/CN.9/WG.III/WG.II),在这里, 在这里, 在这里, 在这里, 在这里, 在这里, 和在这里现在可以了取消一个单独的文件与:
git restore --staged <file>
和取消所有文件以下列方式写成:
git restore --staged .
git restore
于2019年7月以2.23版本发布。
与--staged
旗帜, 它会恢复索引的内容( 在此询问什么 ) 。
运行时git status
与 Saged 未经发送文件一起, Git 现在建议用这个来解开 Page 文件( 而不是git reset HEAD <file>
在 v2.23 之前使用过。