我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
当前回答
更新2019年更新
正如其他人在相关问题中所指出的(见这里、这里、这里、这里、这里、这里、这里、这里和这里),你现在可以拆开一个单一文件:
git restore --staged <file>
并取消所有文件( 从回购根部) , 使用 :
git restore --staged .
Notes
git reformation于2019年7月推出,第2.23版发行,加上 " 级国旗 " ,它恢复了指数的内容(这里要求的内容)。
当 Git 状态与 saged uncommitted 文件同步运行时, Git 现在就建议用它来取消 page 文件( 而不是像 v2. 23 之前那样重置 Git 重置 HEAD < file > ) 。
其他回答
您想要 :
git rm --cached <added_file_to_undo>
理由:
当我刚开始做这个的时候,我第一次尝试
git reset .
(取消我最初添加的全部内容), 只是为了得到这个(不是这样的)有用信息:
fatal: Failed to resolve 'HEAD' as a valid ref.
结果发现,这是因为 HEAD ref (blanch?) 直到第一次承诺之后才存在。 这就是说,你会遇到跟我一样的初学者的问题, 如果你的工作流程像我的一样, 像是:
cd to my great new project directory to try out Git, the new hotness git init git add . git status ... lots of crap scrolls by ... => Damn, I didn't want to add all of that. google "undo git add" => find Stack Overflow - yay git reset . => fatal: Failed to resolve 'HEAD' as a valid ref.
邮件列表上记录了一个窃听器 记录了这个无益之处
正确的解决方案就在 Git 状态输出中( 是的, 我将它伪装成“ 废话 ” ) 。
... # 将要执行的修改 : # (使用“ git rm -- cashed < file >...” 来取消)...
事实上,解决办法是使用Git rm -- cashed FILE。
在此注意其它处的警告 - git rm 删除您本地的文件工作副本, 但如果您使用 -- cashed , 则不使用。 这是 Git help rm 的结果 :
--cached 使用此选项来卸载和从索引中删除路径。 工作树文件, 不论是否修改, 都会被左移 。
我开始使用
git rm --cached .
以删除所有内容并重新开始。 虽然没有成功, 因为添加. 是循环的, 结果显示 Rm 需要 - r 循环。 叹息 。
git rm -r --cached .
好了,我现在回到我开始的地方。下次我要用...
git add -n .
我把所有东西都拉到一个安全的地方,
问题未明确提出。 原因是Git添加有两个含义:
将新文件添加到中转区, 然后用 git rm -- checked 文件撤消。 向中转区添加一个修改过的文件, 然后用 git 重置 HEAD 文件撤消 。
如果有疑问,使用
git reset HEAD file
因为它在两种情况下都做了预期的事
警告: 如果您在已修改的文件上做了 git rm -- checked 文件( 之前在仓库中存在过的文件) , 文件将会在 git 承诺时被删除 ! 它将仍然存在于您的文件系统中, 但是如果有其他人拉动您的执行, 文件将会被从工作树上删除 。
git status 会告诉您文件是新文件还是已修改 :
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: my_new_file.txt
modified: my_modified_file.txt
git rm --cached . -r
将“ un- add- add” 添加您从当前目录中添加的所有内容递归到当前目录
使用 * 命令来一次处理多个文件 :
git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*
等
如果您想要还原最后一个任务, 但仍要保留在任务中本地作出的更改, 请使用此命令 :
git reset HEAD~1 --mixed