繁体   English   中英

如何还原“ git reset”更改?

[英]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的子目录,该子目录又将有两个名为commitother的子目录。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM