有没有办法从'index'和'objects'恢复git提交(或完整的repo)?

有没有办法从'index'和'objects'恢复git提交(或完整的repo)?,git,Git,我有一个本地git repo(没有远程推送),由于一系列的失败,.git文件夹中的大多数文件都丢失了,除了索引文件和对象文件夹有149个子文件夹,每个文件夹有两个字母,但没有“pack”或“info”子文件夹。我不确定这些内容是否未受影响,但之前提交的内容似乎完好无损,见下文。我确实有.git文件夹之外的最新源文件 我首先做了一个git init。尝试git cat file-p,其中是objects中一个子文件夹中的文件名,但它确实显示了以前提交的文件内容,因此看起来文件内容就在那里!然后我做

我有一个本地git repo(没有远程推送),由于一系列的失败,.git文件夹中的大多数文件都丢失了,除了
索引
文件和
对象
文件夹有149个子文件夹,每个文件夹有两个字母,但没有“pack”或“info”子文件夹。我不确定这些内容是否未受影响,但之前提交的内容似乎完好无损,见下文。我确实有.git文件夹之外的最新源文件

我首先做了一个
git init
。尝试
git cat file-p
,其中
objects
中一个子文件夹中的文件名,但它确实显示了以前提交的文件内容,因此看起来文件内容就在那里!然后我做了一个
git-fsck
git-log
,它识别了一些提交(!),但最后说
未能遍历提交的父级

有没有一种方法可以恢复我的承诺,即使是部分,而无需付出艰苦的体力劳动?我还没有找到一个不具备git知识的清晰的分步指南。我非常感谢。我只是希望能够恢复到一些旧的提交(即使我丢失了提交注释)

$git日志cdcb900c1ee7c13ec9f9170d9fd920a427042458
提交cdcb900c1ee7c13ec9f9170d9fd920a427042458
作者:诺姆
日期:星期六2019年2月16日20:35:09+0000
添加了getActiveProfile、changed cmd、其他更改和修复
提交cac37842f103fc996b3fcc14c79b5f1290dd193a
作者:诺姆
日期:星期六2019年2月16日20:32:51+0000
固定websocket连接,重新连接时正确重新初始化;连接时安全获取数据
提交cfef70660bf2588a036e42af71864cae9e4306f2
作者:诺姆
日期:星期六2019年2月16日20:31:41+0000
关闭时显示websocket错误代码,向静态属性添加颜色和RandomInterval类
提交b8c46712337390b1b6951ddec22877bc544819a0
作者:诺姆
日期:2019年2月16日星期六20:30:29+0000
出口回合8()
提交7b56367e9c36c5e8184430c81c92eedac6997a55
作者:诺姆
日期:星期六2019年2月16日20:25:35+0000
修复0随机移位的错误,该移位应使用标准setInterval()
错误:无法读取eb3e02f2e8077321e777262cecdaa8f30639e04a
致命:未能遍历提交55f6802879262fc5861c38e49078ce7f5648a116的父级

您可以将分支指向这些提交:
git branch一些分支cdcb900c1ee7c13ec9f9170d9fd920a427042458
,例如,悬空提交通常不是问题。这只意味着您有一个不再由分支引用的提交。然而,“漏滴”是一个严重的问题。这意味着git对象数据库中缺少blob对象(即文件内容)(在
.git/objects
中缺少)。我认为找回那些“丢失的斑点”是不可能的。也就是说,部分恢复可能是可能的,但某些文件丢失,并且将无法恢复。@Alderath感谢您提供的信息。我对恢复以前的提交感兴趣(因为我有所有源文件的最新版本,我对恢复不感兴趣)。解释您的信息:我是否可以恢复一些提交,但不能恢复其他提交?或者,第一个(最早的)丢失blob的中断提交将中断所有后续提交,因此我只能恢复第一个中断提交之前的提交?@Normadize不确定。这取决于缺少哪些斑点。我会怎么做<代码>1)复制回购协议。(即使回购协议当前已损坏,在试图修复时也很容易将其搞得更糟)
<代码>2。尝试删除所有引用丢失blob的提交对象。(这可能会非常繁琐和耗时)(对其他问题的回答可能很有趣:)是的。。。一次丢失blob的“旧”提交将中断所有后续提交。
$ git init
Initialized empty Git repository in B:/node/api/.git/

$ find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::'| wc -l
210

$ find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::'| head
00130817b1f87593f3425d7b2a0c944950c8b43c
00332e118c6b2a8262ed9a15755e164027d7128a
0273ce793844195ffac500c4e4eda7e8472bf2e1
03815dddd192af3da7f8612827137b64589ca98c
041336afc8226581897c3c880733001f2632ecd8
046b4eb28ac3d3f8fe58bdf5318e002758cdb7d2
04d0004715f30b0ce62afb8c9d72d1186b1a109f
05210208754e117efb216bec37a6b57b827cb9e0
06833614f7b9fefa6aac0d703bb52b0e3dffed9e
07c833c146786495c3e43cd4682b84c8ae24c5ff

$ git cat-file -p 00130817b1f87593f3425d7b2a0c944950c8b43c
040000 tree 0273ce793844195ffac500c4e4eda7e8472bf2e1    base
100644 blob ceafae85b5a7b58c30c67c25fb25679b7cb4e6b3    <filesnip1>.js
100644 blob bd464a4b21337d47b2a5d4da281527f977ccae59    <filesnip2>.js
100644 blob ac538bbe08b480cc1736b7ccde563462c666e136    <filesnip3>.js
100644 blob 50198635620a00083b49f65ccbabb5432f64b76c    <filesnip4>.js
100644 blob 08dc53aa1280c8d40fa8e7e611fd4a5985a1dbe4    <filesnip5>.js
100644 blob 04d0004715f30b0ce62afb8c9d72d1186b1a109f    <filesnip6>.js
100644 blob 78b0f4c9b9d5c9757a5c87b89845d4cfc89be45a    <filesnip7>.js
100644 blob e8bb79792e940c243c156af1b4ef7947a8b60843    <filesnip8>.js
100644 blob 3a195ba028c5b3bd5bc08a61ed16b7d4645f608f    <filesnip9>.js

$ git cat-file -p 78b0f4c9b9d5c9757a5c87b89845d4cfc89be45a
'use strict';
const WebSocket = require('ws');
const crypto = require("crypto");
...
...
<snip>
...
...
$ git fsck --full
Checking object directories: 100% (256/256), done.
notice: HEAD points to an unborn branch (master)
notice: No default references
error: 31395bd3c56cb9e0f4b6882826ac00c2df98b396: invalid sha1 pointer in cache-tree
missing blob 0a623d6bd10c64e268fa8b2c9f2265f15a5d1c49
missing blob 0f04d1005cec5fa6b954d5d7ae31f8f4fe89f5b1
missing blob 13a8aaebc96a76511a730bb9526243684f6eb4f0
missing blob 1a90cf5b56a5a67efb3a7c693fdb159d3b2333ef
dangling blob 212c4ba239ecdbd15c70c05b9336c32175dc8c5c
missing blob 28f6cd30ac098c14d03f32e7e74c2d90f0001b9d
dangling blob 2afa9b0a0057403671580afd16db135503e4d86c
dangling commit 2cb8f3bc3392c4287a1c014d1afc88183f564ba5
missing blob 2e8e889399cbba02a0665df6f6b04cba4d19970d
dangling commit 2d8a7f7b3bf4a437acd9fbe7904b51297d940154
missing blob 307c8a584c7c05d6f3f77945ef0f4f4deebb58da
missing blob 638a6d123efd95eaf3fabf2b6f81f15a3a70d17b
missing blob 67bceb41e2fd3301c30a47bf86de3f76a8d840b4
missing blob 72403d000b71f3d678432206745c52cd7c3e0bf9
missing blob 8d02eb842a03e66e4d942921db524b91aef2dd4a
dangling commit 8dfacc9d8d1530547ddf55b5e54796278cf5f9bf
missing blob 91b44d863eccff6483d1a7511878eeb5494a9404
missing blob afd6a13fda5798509d012b17117478902d7bbc92
missing blob b7f6f0306338eddf56e40c74e30d32dc5ba361a7
missing blob da48049b5d255e43ebb1281bd3d313e22200d000
missing blob de98c1d07b58b9ac3f99319092cfac0b7dbe4a5d
missing blob e65ecbc974e50872399851b0e270492ce8e4f78b
missing blob 15313550fc7153a6c2603bf687df8dde11ed451c
dangling commit 1ecf3a6eafc10c54da23d8da4b2b4439456a1ba9
missing blob 216b0dc693aac0934b7e7d67500b0c216dae60d4
missing blob 401f63a8a0cf1c37ac82d6663cabc13980f43d3c
missing blob 42359d7a307b1b206c1ba4bf4bedb5d0e87e8b81
missing blob 70374d79f8c53af2562e29691406c0aca12addf7
missing blob 7a9fe1056263a4ed262ec8c316eed51eabe467c0
dangling blob 84b1e93a4ccc6bb4d8f2ee038b902c507b76cbbf
missing blob 8f43ce81726561e0843e02ec02968586b424d73f
missing blob 92f3e3b2ab1b34cea7e98bce845ef07f7368f664
missing blob 9661ac713428efbad557d3ba3a62216b5bb7d226
missing blob 98450138737955b70aecf50cc7a28a1e540d411d
missing blob 983114632b6d8e5882b709fe6ba7ec1ac9a0f017
missing blob 9c138981e1437146a34d6b439fe9f20ccd311e4e
missing blob 9d35cccba009b99a9efecee76ae8358e825a37c4
missing blob b6b5be1995ac059924e59cfa5ea52d4f30ee3934
missing blob bca772ddcd6ff824e3c6151ae6af16bb7b725bad
dangling commit cdcb900c1ee7c13ec9f9170d9fd920a427042458
missing blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
missing blob e991eacc220822ac737ad17e38743e21cf3a8b93
missing blob f467ddd0ec8bb3dbc374990d5dea5173790e570a
missing blob f933a3defe31685010d9cea152053e65bed54d32
$ git log cdcb900c1ee7c13ec9f9170d9fd920a427042458
commit cdcb900c1ee7c13ec9f9170d9fd920a427042458
Author: norm
Date:   Sat Feb 16 20:35:09 2019 +0000

    added getActiveProfile, changed cmd, other changes and fixes

commit cac37842f103fc996b3fcc14c79b5f1290dd193a
Author: norm
Date:   Sat Feb 16 20:32:51 2019 +0000

    fix websocket connect to properly re-initialize when reconnecting; safe fetching of <snip> upon connection

commit cfef70660bf2588a036e42af71864cae9e4306f2
Author: norm
Date:   Sat Feb 16 20:31:41 2019 +0000

    show websocket error code on close, add colors and RandomInterval class to static properties

commit b8c46712337390b1b6951ddec22877bc544819a0
Author: norm
Date:   Sat Feb 16 20:30:29 2019 +0000

    export round8()

commit 7b56367e9c36c5e8184430c81c92eedac6997a55
Author: norm
Date:   Sat Feb 16 20:25:35 2019 +0000

    fix bug for 0 random shift which is supposed to use standard setInterval()
error: Could not read eb3e02f2e8077321e777262cecdaa8f30639e04a
fatal: Failed to traverse parents of commit 55f6802879262fc5861c38e49078ce7f5648a116