2

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

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

我用谷歌搜索了这个错误,发现了 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文件。我不完全知道,它们是如何丢失的(我总是移动整个目录),但现在的问题是,如何恢复所有内容,以便我仍然拥有提交日志并可以将我的更改提交到存储库。

4

1 回答 1

2

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

  1. 创建一个空存储库git init
  2. 将您不完整的存储库复制到其上,覆盖空存储库也具有的所有文件。

如果它现在被识别为 Git 存储库但缺少一些提交,请执行以下操作:

  1. git fsck --lost-found
  2. .git/lost-found/commit目录移至.git/refs/heads
  3. 检查历史记录gitk --all并为您要保存的任何内容创建分支或标签。
  4. 最后清理:将保存的分支推送到远程存储库或从.git/refs/heads丢失和找到的分支中删除。

然后下次记得进行备份,无论是通过推送到远程存储库还是使用自动备份应用程序。;)

于 2012-04-06T10:25:56.957 回答