Soooo ....我做了“git reset HEAD myfilename”,它删除了我所有的本地更改。我认为我没有对当地的回购做任何承诺。
有没有办法恢复已删除的代码? :L
答案 0 :(得分:3)
git reset HEAD filename
只是清除索引中的缓存更改(基本上是撤消git add
)。如果您对工作副本进行了更改,并且您不再拥有它们,那么还会有其他内容。
当你这样做时:
git checkout -- js/ModuleVk.js
这抓住了HEAD
版本的js/ModuleVk.js
,将其写入索引,然后将其写入工作树。所以 可能会遭受破坏。
如果在此之前执行了git add
,则repo包含add
发生时工作文件的副本。您可以使用git fsck --lost-found
找到它,这将打印一些这样的消息:
dangling commit 7a07e53b3c753c93303c881605c81cc476c6a1de
dangling blob 8177212592bb88a3c4614ee288d6a8a01dee0b42
dangling commit 83630458b4317f5db42c3a306e299ca8c26a7ed9
dangling blob b50f361891f38b85a5733b3124e261654ed457ad
dangling blob b67bea2cf13d558e4092e9c1939b2273ac904f83
完成所有操作后,.git
目录将有一个名为lost-found
的子目录,该子目录又有两个名为commit
和other
的子目录。< / p>
other
中的文件都有SHA-1名称,因此您只需手动查看它们。很明显哪些是.js
代码,但要确定哪一个git add
版本可能很棘手,具体取决于你git add
编辑了多少东西但实际上没有随着时间的推移承诺。 (我习惯性地git add
东西,git diff --cached
,决定改变一些,再次git add
,等等。每个人都将另一个“悬挂的blob”放入存储库。他们最终gc'ed,磁盘空间便宜....)
完成文件后,您可以手动删除.git/lost-found
中的所有内容:
rm -r .git/lost-found
(你可以稍后用另一个git fsck --lost-found
重新生成它们,虽然一旦垃圾收集器收获悬空物体,它们真的很好 - 但默认情况下,“新鲜”物体需要至少两周时间。 / p>
答案 1 :(得分:1)
不,如果文件消失了,那么它们就不见了。
如果您使用Eclipse,您仍然可以在本地历史记录中找到它们(尝试比较... /本地历史...)