昨晚制作一些我从别人那里继承的遗留代码已经太晚了。除了将事物置于版本控制之外,我还希望将代码库从标签转换为空格。在我的工作目录中用两个空格替换所有制表符。递归。包括.git目录。我做了一些改变并承诺了,但还没有在其他任何地方推销回购。
如果我只是必须重新开始回购并将变化压缩到一次提交中,这并不是一个巨大的损失,但假设我要付出努力,这种情况有多可恢复?
在某种程度上,我很高兴在我走得太远之前犯了这个错误,但是假设这是一个长达数年的项目的唯一副本,你会变得多么紧张?
答案 0 :(得分:1)
递归。包括.git目录 首先,您需要验证您的
.git
文件夹是否已损坏"。
# Verify that the .git folder and all the objects are still usable
git fsck --full
如果您没有看到并悬空数据,那么您就可以了。
但还没有将回购推送到其他任何地方
即使你按下(除非你强行推动),你仍然可以恢复所有以前的数据
在某种程度上,我很高兴在我走得太远之前犯了这个错误,但是假设这是一个长达数年的项目的唯一副本,你会变得多么紧张?
如果你没有备份,你将遇到巨大的麻烦。这是一个可以恢复的情况,但需要做很多工作。
如果您已将所有选项卡替换为空格,反之亦然,则必须再次尝试替换它们,好处是git具有SHA-1,即内容的sha1sum
(内容)本身是压缩的,里面的格式不应包含任何空格。
很短(比它复杂一点)git计算以下内容的SHA-1并压缩它:
blob<space><content_lengt><null><content>
然后git用zlib压缩上面的内容。因此,如果您知道如何存储文件,您可以尝试恢复它们,但它需要做很多工作。另一方面,内容中不应该有空格,所以你在内部(.git/object
)搞乱的几率很小。
Summary
强> 无论你做什么 从不 触摸.git
文件夹!!!