[英]How to revert “git reset” changes?
太...我做了“ git reset HEAD myfilename”,它删除了我所有的本地更改。 我认为我没有对本地存储库进行任何提交。
有办法还原已删除的代码吗? :L
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
的子目录,该子目录又将有两个名为commit
和other
的子目录。
other
所有文件均具有SHA-1名称,因此您只需要手动查看它们即可。 很明显,哪个是.js
代码,但是弄清楚哪个是哪个git add
-ed版本可能很棘手,具体取决于您随着时间的推移已经git add
但未实际提交的内容。 (我习惯性地git add
东西, git diff --cached
,决定对其进行一些更改, git add
再次git add
,依此类推。每一个都在存储库中放入另一个“悬挂的blob”。它们最终被gc化了,并放入了磁盘空间很便宜....)
一旦完成其中的文件,就可以从.git/lost-found
手动删除所有内容:
rm -r .git/lost-found
(您可以稍后使用另一个git fsck --lost-found
来重新生成它们,尽管一旦垃圾收集器收获了悬空的对象,它们实际上就一去不复返了-但默认情况下,“新鲜”对象至少需要两周的时间)。
不,如果文件消失了,那么它们也消失了。
如果使用Eclipse,您仍然可以在本地历史记录中找到它们(尝试“比较...” /“本地历史记录”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.