如何恢复“git reset”更改?

时间:2014-02-26 10:04:50

标签: git

Soooo ....我做了“git reset HEAD myfilename”,它删除了我所有的本地更改。我认为我没有对当地的回购做任何承诺。

有没有办法恢复已删除的代码? :L

2 个答案:

答案 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的子目录,该子目录又有两个名为commitother的子目录。< / 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,您仍然可以在本地历史记录中找到它们(尝试比较... /本地历史...)