我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
当前回答
撤消撤消已经添加的文件使用 Git 很容易。 用于重设myfile.txt
已经添加的,使用:
git reset HEAD myfile.txt
解释:
启动不需要的文件后,要撤消文件,您可以完成git reset
. Head
是在本地文件中您文件的头,而最后一个参数是您文件的名称。
我为你们创建了以下图像中的步骤, 更详细地介绍了这些步骤, 包括在这些情况下可能发生的所有步骤:
其他回答
撤消撤消git add
用于未承诺更改的更改 :
git reset <file>
这将将文件从当前索引( “ 即将被承诺” 列表) 中删除, 而不更改其它内容 。
取消所有文件的所有更改 :
git reset
在旧的 Git 版本中,上述命令相当于git reset HEAD <file>
和git reset HEAD
或将失效,如果HEAD
未定义(因为你尚未在仓库中做出任何承诺)或模糊(因为你创建了一个分支,称为:HEAD
这是你不该做的蠢事在Git 1.8.2中更改。,所以在现代版本的 Git 中,你可以使用上面的命令,甚至在你第一次做出承诺之前:
当您在历史中没有任何承诺时, “ 将重置” (没有选项或参数) 用于错误退出, 但它现在给了您一个空索引( 匹配不存在的重置, 您甚至没有在 ) 。
文 件:git 重设
您想要 :
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
你们不要毁灭任何物,如果我误译了它,
正如其他人在相关问题中所指出的(见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 之前使用过。
在源树中,您可以通过 GUI 轻松地做到这一点。您可以检查源树命令用什么来取消文件 。
我创建了一个新的文件, 并将其添加到 Git 中。 然后我用“ 原始树 GUI” 解除了它。 这是结果 :
解除文件 [08/12/ 15 10: 43] git - c diff. mnemonicprefix= false - c c c核心. cootepath= false - creedical. helper= 源树重新设置 -q - 路径/ 到/ 文件/ files/ filename.java
源树用途reset
以卸载新文件。
根据其他许多答案,你可以使用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