腐败git repo的问题

eps*_*nes 14 git git-checkout

运行查找和替换命令时,我的git repo损坏了(参见此处:查找和替换后Git重置失败).所以我删除了一些包文件,告诉我哪些git告诉我无法访问.所以我运行了rm ./.git/index,git reset.运行git commit时,我收到了以下消息:

fatal: corrupt tree sha $someSHA
Run Code Online (Sandbox Code Playgroud)

最后git fsck,我的工作目录变得干净了,我能够提交.pb现在是当我运行git checkout some_other_branch时,我收到了这条消息

fatal: unable to read tree $someSHA
Run Code Online (Sandbox Code Playgroud)

(出现的$ someSHA是相同的).有人可以帮帮我吗?

编辑1:

当我运行git fsck --full时,我得到了一个系列

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...
Run Code Online (Sandbox Code Playgroud)

然后是一系列的

broken link from    tree d935b909f76ea92728d71038d0a67384353e65e1
              to    blob 05b97658ebd47fee25b76d80ac76cbd07d77961d
...
Run Code Online (Sandbox Code Playgroud)

然后一些失踪的斑点......

编辑2:

我运行了git log --raw --all --full-history - subdir/my-file,我得到了

error: refs/remotes/repo0/master does not point to a valid object!
error: refs/remotes/repo1/new-version does not point to a valid object!
...
error: Could not read 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7
fatal: cannot simplify commit 8dfd8e3d5b698dc979300d93d8e89a757abf6ec6 (because of 9096eb9d9dcbdf15a04e0a7c78a3744936f82ac7)
Run Code Online (Sandbox Code Playgroud)

编辑3:

我跑了git fsck --full,我得到了很多线

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
fatal: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accessed
...
Run Code Online (Sandbox Code Playgroud)

当跑到git checkout另一个分支时,我得到了很多消息:

error: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack does not match index
warning: packfile .git/objects/pack/pack-3e7a0c040a5e3d1c21b91256d583424d82a59706.pack cannot be accessed
....
fatal: unable to read tree 2ad71d368b65eff0b6fec1ef72c6fdde6e80edad
Run Code Online (Sandbox Code Playgroud)

编辑4:

按照建议的答案,我解压缩文件,当我签出时,我得到一些行如下:

error: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack does not match index
warning: packfile .git/objects/pack/pack-fbfd8042e1e96bf5ffff88f9b5a230b8f5e4d4c4.pack cannot be accesse....
Run Code Online (Sandbox Code Playgroud)

然后是一系列以

 error: Your local changes to the following files would be overwritten by checkout:
.idea_local_work/.name
.idea_local_work/libraries/sass_stdlib.xml
.idea_local_work/scopes/scope_settings.xml
... and then aborting
Run Code Online (Sandbox Code Playgroud)

Chr*_*ial 23

第一:备份您的.git目录,以防您在此过程中损坏更多内容.然后:

  • 放回您可用的最佳版本的packfiles.
  • 对于每个损坏的包文件,运行:

    mv .git/objects/pack/pack-**yourpack**.pack oldpack
    git-unpack-objects -r < oldpack
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行git fsck --fullgit checkout再次,给我们的输出.

  • 看起来你现在应该可以退房了,但是你必须运行git checkout -f **yourbranch**,因为你的工作目录中有尚未提交的更改.git checkout -f但是,当您运行时,这些更改将会丢失.

  • 不得不运行`git unpack-objects -r <oldpack`而不是`git-unpack-objects -r <oldpack` (7认同)
  • 编写脚本来解压所有这些"无法访问"的包文件:https://gist.github.com/kirikaza/6178695#file-fix-git-packfiles-sh. (5认同)