在git中恢复晃来晃去的斑点

我做了一个“git rm -rf”。 (试图清除“git add”后删除的文件的caching),而不会想到git会物理删除这些文件。 我还没有初始提交/分支。

$ git init $ git add . 

我记得加上我的“.gitignore”。 然后,由于懒惰,也没有麻烦去查找我做的正确的命令:

 $ git rm -rf . 

现在每个git跟踪的文件都没有了。 哎呀。

如何使用悬空斑点恢复文件

 $ git fsck notice: HEAD points to an unborn branch (master) notice: No default references dangling blob 45cb2316b079df7898a28bab1389c87d37de4da5 dangling blob 06b9d0f91bb0643a54ec027efc0efd6645d95326 dangling blob c6c828230bc129da40928d55297577421c6f2e79 dangling blob 087b296f5ae80151fb0d6150927ebe8049ed7706 dangling blob c957743cb7ea533ce772d178394ce9f656b17b7c dangling blob 0ea745612b105394f5cd5c0119a829de98a0a954 dangling blob 8fb1fa03c12cd56d4e2284008e92a3666bc60b93 dangling blob cf49a6cf77ac792b108577c01ccf88cb2c28228c dangling blob 93817d9eeefea6ea894544e78b0e0970aa5adc46 dangling blob 94a9ed024d3859793618152ea559a168bbcbb5e2 dangling blob 574b7130959f2278c88946cf385fc49adcdf28c2 dangling blob 582f5bceb8b35c01fd7442678a3cd7e1088b7957 dangling blob d9fb7ca5775745b4332f630400d52c979aab35cd dangling blob 2087b182bf8b4b8d5ed8fe45a50c7661bda25feb dangling blob 6109baf32d04410c84d860501057a7f55a13f9dd dangling blob 22cc2ac7585b1d47bccf2ecb7bf57e16c2142bb6 dangling blob 63b329443cc27273fad14c1e41de5bb9bf1bdd03 dangling blob a2296d429715c9b6d730fdcc972eefdf8273d2e2 dangling blob e41aedd7b2dbdee8b965a30d40ed0c9275194984 dangling blob 6dc7b06e8f03cda72cf223b050d07ccd2b850fc8 dangling blob ee52d86d94a40e7092dc34d1b2760244ec7dccaf dangling blob 2ffa08c086d3702563d498c9069a345940b3a348 dangling blob 6fafa07526ad288ff2f6e26810ed9818eb18aabb dangling blob b1cdf17b5bb40b4839cfc80f7e91bbcf7b94f798 dangling blob 353db77b88c248c752cdbd914787b9ebdf2d700f dangling blob f61d3492ce0d0e396fd322114a5e3475886de1cc dangling blob 7756a8713095390f5b106b81ae7f7247f762970b dangling blob bc995b7f9f6806dd5678227579a515bb5768d3a0 dangling blob fce4a77b63b25abbc010859b4037589983820329 dangling blob 3e3335f8cd27168d4fe81f61421d647f2905b7b0 dangling blob 7f56efed4f8706e5b79408afbde197964d824eab 

环顾四周,我只能find恢复悬而未决的提交教程

您可以使用git show fce4a77b63b25abbc010859b4037589983820329来查看内容(或将git show fce4a > somefile转储到文件中)。

文件名会丢失(除非在.bash_history中还有悬挂树或其他信息来源,如命令历史logging)。

如果你可以看到(使用git ls-tree )你的根树,你可以使用git commit-tree命令或者一些git checkout e48751c3b37a9cab692133202bbb933241f73f69 -- .创build一个提交git checkout e48751c3b37a9cab692133202bbb933241f73f69 -- . 检索文件。

我已经恢复他们在过去使用fsck命令与失物招领选项:

git fsck --lost-found

运行,然后将悬空斑点保存到以下path

.git/lost-found/other

看到这里: http : //schacon.github.com/git/user-manual.html#dangling-objects

对于提交,您可以使用:

  $ gitk <dangling-commit-sha-goes-here> --not --all 

这要求所有的历史可以从给定的提交,但不能从任何分支,标签或其他参考。 如果你决定这是你想要的东西,你可以随时创build一个新的参考,例如,

  $ git branch recovered-branch <dangling-commit-sha-goes-here> 

对于斑点和树木,你不能这样做,但你仍然可以检查它们。 你可以做

  $ git show <dangling-blob/tree-sha-goes-here> 

通常,晃来晃去的斑点和树木不是很有趣。 它们几乎总是作为一个中途合并库的结果(如果你有手动合并的冲突合并,blob通常甚至会有合并的冲突标记),或者仅仅是因为你中断了使用^ C或类似的东西“git fetch”,在对象数据库中留下一些新的对象,但只是悬而未决。