如何在提交前撤销'git add'?
我错误地使用以下命令将文件添加到git:
git add myfile.txt
我还没有运行git commit
。 有没有办法解决这个问题,所以这些文件不会包含在提交中?
到目前为止有48个答案(一些被删除)。 除非你有一些新的信息,否则请不要添加新的。
您可以在提交之前撤消git add
git reset <file>
这将从当前索引(“即将承诺”列表)中删除它,而不会改变任何其他内容。
您可以使用
git reset
没有任何文件名称以取消所有应有的更改。 当在合理的时间内逐一列出太多文件时,这可以派上用场。
在旧版本的Git中,上述命令分别等同于git reset HEAD <file>
和git reset HEAD
,如果HEAD
未定义(因为您尚未在您的repo中进行任何提交)或模糊(因为您创建了一个名为HEAD
的分支,这是一个你不应该做的愚蠢的事情)。 不过,在Git 1.8.2中这一点已经改变了,所以在现代版本的Git中,甚至在进行第一次提交之前,您可以使用上面的命令:
“git reset”(没有选项或参数)用于在历史记录中没有任何提交时出错,但它现在会为您提供一个空索引(以匹配不存在的甚至不存在的提交)。
你要:
git rm --cached <added_file_to_undo>
推理:
当我是新人时,我第一次尝试
git reset .
(撤消我的整个初始添加),只是为了得到这个(不是那么)有用的消息:
fatal: Failed to resolve 'HEAD' as a valid ref.
事实证明,这是因为HEAD ref(branch?)直到第一次提交后才存在。 也就是说,如果您的工作流程与我的工作流程类似,您将遇到与我一样的初学者问题:
git init
git add .
git status
...很多废话卷轴......
=>该死的,我不想补充所有这些。
谷歌“撤消git添加”
=>找到堆栈溢出 - 耶
git reset .
=>致命:无法将“HEAD”解析为有效的参考。
它进一步证明了,在邮件列表中没有记录这个bug的缺点。
而且正确的解决方案就在Git状态输出中(这是的,我把它当作废话)
...
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
...
解决方案的确使用git rm --cached FILE
。
请注意这里的其他地方的警告 - git rm
会删除您的本地文件工作副本,但如果您使用--cached ,则不会。 这是git help rm
的结果:
--cached使用此选项可以仅从索引中取消并删除路径。 工作树文件将被保留,无论是否修改。
我继续使用
git rm --cached .
删除所有内容并重新开始。 虽然没有工作,因为当add .
是递归的,结果rm
需要-r
进行递归。 叹。
git rm -r --cached .
好吧,现在我回到我开始的地方。 下次我要用-n
做一个干运行,看看会添加什么:
git add -n .
我把所有东西都压缩到了一个安全的地方,然后再相信git help rm
关于--cached
没有破坏任何东西(以及如果我拼写--cached
了会怎么样)。
如果你输入:
git status
git会告诉你什么是上演等,包括如何取消的说明:
use "git reset HEAD <file>..." to unstage
我发现git在推动我在这种情况下做正确的事情方面做得相当不错。
注意:最近的git版本(1.8.4.x)已经改变了这个消息:
(use "git rm --cached <file>..." to unstage)
链接地址: http://www.djcxy.com/p/36253.html