修复不完整的.git目录

时间:2012-04-06 09:18:31

标签: git

我有一个工作目录,它是一个git存储库。今天,我在文件夹和文件结构中进行了很多更改,并且还移动了.git目录。现在,尝试提交这些更改,我收到以下错误:

fatal: Not a git repository (or any parent up to mount parent )

我用Google搜索了错误,发现git使用的条件来确定当前目录是否是git存储库。事实证明,我的.git缺少一些文件和文件夹:

$ ls -la .git
total 36
drwxr-xr-x   5 oli oli 4096 Apr  6 10:51 .
drwxr-xr-x  10 oli oli 4096 Apr  6 11:05 ..
-rw-r-xr--   1 oli oli   30 Mar  3 13:39 COMMIT_EDITMSG
-rw-r--r--   1 oli oli   41 Mar  3 13:40 ORIG_HEAD
-rw-r--r--   1 oli oli 6612 Mar  3 13:40 index
drwxr-xr-x   2 oli oli 4096 Jan 27 19:58 info
drwxr-xr-x   3 oli oli 4096 Jan 27 19:58 logs
drwxr-xr-x 165 oli oli 4096 Mar  3 13:40 objects

与另一个存储库相比,缺少多个对象,最重要的是HEAD文件。我不确切知道,他们是如何迷路的(我总是移动整个目录)但问题是现在,如何恢复所有内容以便我仍然拥有提交日志并可以将我的更改提交到存储库。

1 个答案:

答案 0 :(得分:2)

不知道这是否有效,但请尝试此操作(进行备份后)。我希望来自.git/objects的文件不会丢失 - 否则我怀疑任何事都会有所帮助。

  1. 使用git init
  2. 创建一个空存储库
  3. 将不完整的存储库复制到其上,覆盖空存储库中的所有文件。
  4. 如果它现在被识别为Git存储库但缺少某些提交,请执行以下操作:

    1. git fsck --lost-found
    2. 移动.git/lost-found/commit
    3. 下的.git/refs/heads目录
    4. 使用gitk --all检查历史记录,并为要保存的任何内容创建分支或标记。
    5. 最后清理:将已保存的分支机构推送到远程存储库,或从.git/refs/heads中删除丢失和找到的分支。
    6. 然后下次记得通过推送到远程存储库或使用自动备份应用程序进行备份。 ;)