Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git中恢复悬挂的水滴_Git - Fatal编程技术网

在git中恢复悬挂的水滴

在git中恢复悬挂的水滴,git,Git,我做了一个“git rm-rf.”(尝试清除在执行“git add.”之后删除的文件的缓存),而没有想到git会实际删除这些文件。我还没有初始提交/分支 $ git init $ git add . 我记得加上“.gitignore”。然后,出于懒惰和不费心查找正确的命令,我做了: $ git rm -rf . 现在git跟踪的每个文件都消失了。哎呀 如何使用悬挂的blob恢复文件 $ git fsck notice: HEAD points to an unborn branch (mas

我做了一个“git rm-rf.”(尝试清除在执行“git add.”之后删除的文件的缓存),而没有想到git会实际删除这些文件。我还没有初始提交/分支

$ git init
$ git add .
我记得加上“.gitignore”。然后,出于懒惰和不费心查找正确的命令,我做了:

$ git rm -rf .
现在git跟踪的每个文件都消失了。哎呀

如何使用悬挂的blob恢复文件

$ 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
环顾四周,我只能找到有关恢复悬空提交的教程

请参见此处:

对于提交,您只需使用:

    $ gitk <dangling-commit-sha-goes-here> --not --all
$gitk——不是全部
这要求所有历史记录都可以从给定的提交中访问,但不能从任何分支、标记或其他引用中访问。如果你决定它是你想要的东西,你可以创建一个新的引用,例如

    $ git branch recovered-branch <dangling-commit-sha-goes-here>
$git分支已恢复分支
对于斑点和树,您不能做相同的操作,但仍然可以检查它们。你只需要做

    $ git show <dangling-blob/tree-sha-goes-here>
$git show
通常,悬挂的水滴和树木都不是很有趣。它们几乎总是一个中间的mergebase的结果(blob中经常会有来自merge的冲突标记,如果您手动修复了冲突的merge),或者仅仅是因为您用^C或类似的东西中断了“git fetch”,在对象数据库中留下了一些新对象,但只是晃来晃去,毫无用处。


您可以使用
git show fce47b63b25abbc010859b4037589983820329查看内容(或
git show fce4a>somefile
将其转储到文件)

文件名丢失(除非
.bash\u history
中还有悬空树或其他信息源,如命令历史记录)


如果您可以看到(使用
git ls tree
)您的根目录树,您可以使用
git commit tree
命令或一些
git checkout e48751c3b37a9cab69213320bb933241f73f69--.
来检索文件。

我过去使用fsck命令和lost and found选项来恢复它们:

git fsck——失物招领

运行该命令,然后将悬挂的水滴保存到以下路径

.git/失物招领/其他


下面是一个将blob转换为可读的.txt文件的脚本 使用其他答案(例如,user909746的答案)创建并导航到失物招领文件夹。 在丢失文件夹中,运行:

for FILE in *; do git show $FILE > "$FILE.txt"; done

这将为每个blob创建一个.txt副本,并将其添加到当前目录,即丢失文件夹。现在,您可以使用所选的文件资源管理器对.txt文件进行筛选,并浏览所有文件以找到所需的文件。

OP希望恢复尚未提交的文件。通过一些bash魔法,您可以执行循环并还原文件,但如果文件名的某些内容中没有文件名,并且没有悬空树,你所要做的就是一个文件接一个文件,根据文件内容猜测文件名。我现在可以查看丢失的文件了。我将编写一个脚本,将blob放入文件1.txt、2.txt、3.txt等。悬空根树(+deps)=在一个命令中完全恢复工作树(
git commit tree
)。无树=>仅来自内容(自动或非自动)
.bash\u history
可能会有所帮助。这刚刚保存了我的a$$。出于某种原因,我选择在提交之前“重置”Git扩展中的更改-丢失了一个下午的工作。此命令将我的所有文件恢复到上述文件夹中。然后我检查了每一个,以恢复内容并将代码恢复到我的代码库中。非常感谢。如果阅读本文的人仍然不知道,
(尝试清除我在执行“git add”后删除的文件的缓存)。
实际上是通过使用
git reset
git rm--cached
(注意最后一点!)来完成的。它们更好地回答了这个问题:我从来没有像我现在所说的那样欣赏堆栈溢出。”git现在非常有用,“但又一次是git把我弄得一团糟