如何在本地恢复`.git/index`?

dya*_*ugh 23 git recovery git-index

我不小心删了.git/index,有办法恢复吗?它被永久删除了.我还没有做任何事情.

ken*_*orb 36

要重建索引文件,您可以尝试以下两个命令:

git reset         # re-scan the working directory
git add -u        # update the index
Run Code Online (Sandbox Code Playgroud)


PSk*_*cik 5

我认为这是不可能的,无论如何都不可能git(您可以尝试查看“垃圾箱”目录或文件系统提供的任何恢复方法)。不过,只要您执行git add某些操作或执行其他需要索引的操作,您就会获得一个新索引。

如果您丢失了任何已编辑的文件git add,您可以通过 ./git/objects ( find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::' ) ,检查每个文件的内容git cat-file -p $the_hash,一旦找到丢失的文件,将输出重定向到一个文件。

(当您 时git add,文件名条目将转到.git/index,文件内容将存储在 中.git/objects/。Git 索引由您创建时创建的潜在树对象的文件名条目组成commit。您可以查看索引的人类可读表示形式和git ls-files --stage)。

  • 索引里面有更多的东西,但是,是的,它基本上是名称和哈希的缓存。为了完整起见,值得一提的是,索引每个名称有四个可能的“槽”:槽 1-3 仅在冲突合并期间使用,槽 0 是正常的下一个提交条目所在的位置。 (2认同)
  • 这节省了我不少时间。我暂存了一些文件,并意识到该存储库正处于樱桃挑选过程中,执行“gitcherry-pick --abort”清除了索引!我用了你的`查找| sed`命令恢复索引。谢谢! (2认同)

jth*_*ill 5

您可以使用 恢复上次结帐时的索引git reset。从那时起您添加的任何内容仍然会添加,它在存储库中,但索引是唯一记录路径和内容关联的地方。您可以让 git fsck 将无法访问的对象放入 lost'n'found 目录中,查看其文档,然后在熟悉的领域中最快的方法是将内容放回工作树中并再次添加,git 不会复制内容,但是它将恢复索引条目。