2014-02-26 183 views
0

Soooo ....我做了“git reset HEAD myfilename”,它删除了我所有的本地修改。我认为我没有对当地的回购进行任何承诺。如何恢复“混帐重置”更改?

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

+1

普通'git reset',又名'git reset --mixed',不会触及工作文件。你有没有做别的,也许'git reset --hard'? – torek

+0

没有。我只是.. err ..试图从提交中删除文件,我想现在我明白git藏匿。但我没有这么做 - 很难确定,也不能在任何当地的分支机构找到我的变化。 – deb0rian

+0

其实这是我做的: '982 2014-02-25 12:48:28 git status 983 2014-02-25 12:48:38 git reset HEAD引擎/ SocialIntegFrontend。php 984 2014-02-25 12:48:46 git status 987 2014-02-25 12:49:06 git reset HEAD js/ModuleVk.js 988 2014-02-25 12:49:25 git checkout - - js/ModuleVk.js ' Unfixable,对不对? – deb0rian

回答

3

git reset HEAD filename刚刚送走缓存变化指数(基本上,撤消git add)。如果你有工作副本的变化,你不能再拥有他们,别的东西没有他们在

当你这样做:

git checkout -- js/ModuleVk.js 

这抓住了HEAD版本的js/ModuleVk.js写道,到索引,然后将其写入工作树中。所以可能会发生破坏性的变化。

如果做到这一点之前git add,不过,回购包含在add发生时的工作文件的副本。你可以用git fsck --lost-found发现这一点,这将打印一些像这样数量的消息:

dangling commit 7a07e53b3c753c93303c881605c81cc476c6a1de 
dangling blob 8177212592bb88a3c4614ee288d6a8a01dee0b42 
dangling commit 83630458b4317f5db42c3a306e299ca8c26a7ed9 
dangling blob b50f361891f38b85a5733b3124e261654ed457ad 
dangling blob b67bea2cf13d558e4092e9c1939b2273ac904f83 

当这一切都完成了你.git目录将有一个名为lost-found一个子目录,这反过来将有一个名为两个子目录commitother

other中的文件都有SHA-1名称,所以你必须手动查看它们。应该很明显哪些是.js代码,但是要确定哪一个是哪个版本可能会非常棘手,这取决于您随着时间的推移编写了多少东西,但没有实际提交。 (我习惯上git add东西,git diff --cached,决定改一些,git add再次,等等。每一个把另一个“晃来晃去的斑点”放到版本库中,最终被gc化,磁盘空间很便宜。 。)

一旦你在那里与文件完成后,你可以手动删除.git/lost-found一切:

rm -r .git/lost-found 

(你可以用另一个git fsck --lost-found后重新生成它们,虽然一度垃圾收集收割晃来晃去的对象他们真的很好 - 但默认情况下,对于“新鲜”对象至少需要两周)。

1

不,如果文件消失了,那么它们就消失了。

如果你使用Eclipse,你仍然可以找到他们在当地的历史(试比较... /本地历史记录......)