我曾使用命令 git checkout -- $(git ls-files -m)
来撤销 git 对一些文件的 rm
操作。但是,我修改了其他一些文件并没有提交它们,这些文件已经被还原到了之前的提交版本,未提交的更改也因此丢失了。
有没有办法找回这些更改呢?
我想 git 无法做到,因为这些更改没有被添加到 git 中。我用的是 Mac 系统,这是否有所帮助。
谢谢, 汤姆
我曾使用命令 git checkout -- $(git ls-files -m)
来撤销 git 对一些文件的 rm
操作。但是,我修改了其他一些文件并没有提交它们,这些文件已经被还原到了之前的提交版本,未提交的更改也因此丢失了。
有没有办法找回这些更改呢?
我想 git 无法做到,因为这些更改没有被添加到 git 中。我用的是 Mac 系统,这是否有所帮助。
谢谢, 汤姆
"
git checkout
真的会在不提示的情况下覆盖未提交的更改吗?"
答案仍然是"是的",在2018年(刚测试过2.11)
在2019年8月,使用Git 2.23仍然如此,但现在有一个更加 明确的git restore
命令。
简单的git restore .
也会从索引内容恢复工作树(因此,如果文件被修改但未添加到该索引中,则它们的更改仍将丢失)
但至少现在 不存在文件和分支checkout之间的混淆。
git checkout
将被淘汰(过时)。只有 git switch
和 git restore
会保留。 - VonC默认情况下你无法找回被git checkout filename
误删的文件,但在紧急情况下可能会有所运气,按以下方式尝试找回文件:
撤销
来取回文件,因为如果磁盘上的文件被更改,它往往会加载到当前版本),然后保存。
git reflog
。在你的情况下可能会有帮助。它就像是一张可以重置到还原点的列表。http://git-scm.com/docs/git-reflog - Timgit add
命令添加了修改后的内容,那么它们现在已经存储在版本库中,并且会被显示为"悬空blob"(可以使用git fsck --lost-found
获取文件内容,但是文件名已经丢失)。如果没有这样操作...好吧,如果 Time Machine 备份了它们,你可能可以从那里找到它们。否则,它们很可能已经丢失了。 - torekformat c:
或rm -r
不应该询问,因为您故意发出了命令... :) ) - Sz.