问题:
- 不小心做了一个 git --amend 并将其从第一台计算机推送到 USB 密钥
- 从 USB 密钥拉到第二台计算机
- 第二台计算机存储库现已损坏
- git pull 到第一台计算机导致合并冲突;对这是否也是损坏状态感到困惑(如果 --amend 已损坏)
症状:
大多数命令:
fatal: your current branch appears to be broken
.git/refs/heads/master:
$ cat .git/refs/heads/master
.git/refs/heads/master 的文件内容:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
$ git status
new file: ...
new file: ... [for every file in the repository; expected since on a corrupted branch]
我不确定我是否愿意责怪 git --amend ,因为它看起来有点温和;也许发生了其他事情。
怎么修?:
解决这个问题就像从 .git/logs/refs/heads/master 的最新良好提交中获取哈希并将其手动插入 .git/refs/heads/master 一样简单吗?我该怎么做,如果
如果是这样,我应该销毁有问题的提交(这样它就不会在以后破坏东西,比如 agit-repack
或其他东西)?
当我尝试从表单的最后一行less .git/logs/refs/heads/master
获取 [edit:typo]的第一个哈希时...
...
[hash for HEAD~2] [hash for HEAD~1] [authorname] ...
[hash for HEAD~1] [hash for HEAD] [authorname] ...
^^^^^^^^^^^^^^^^^ (corrupted)
EOF
...然后粘贴到 .git/refs/heads/master 文件中,我现在坚持...
$ git fsck
error: inflate: data stream error (unknown compression method)
error: unable to unpack header of .git/objects/8f/1da374ffac3711f8cdde57379f90cb03bbb9ea
error: 8f1da374ffac3711f8cdde57379f90cb03bbb9ea: object corrupt or missing: .git/objects/8f/1da374ffac3711f8cdde57379f90cb03bbb9ea
error: inflate: data stream error (unknown compression method)
error: unable to unpack header of .git/objects/ac/2fcd052804fb7adac465220da5bcb04d008fc7
error: ac2fcd052804fb7adac465220da5bcb04d008fc7: object corrupt or missing: .git/objects/ac/2fcd052804fb7adac465220da5bcb04d008fc7
Checking object directories: 100% (256/256), done.
Checking objects: 100% (1147/1147), done.
error: inflate: data stream error (unknown compression method)
error: unable to unpack 8f1da374ffac3711f8cdde57379f90cb03bbb9ea header
error: inflate: data stream error (unknown compression method)
error: unable to unpack 8f1da374ffac3711f8cdde57379f90cb03bbb9ea header
fatal: loose object 8f1da374ffac3711f8cdde57379f90cb03bbb9ea (stored in .git/objects/8f/1da374ffac3711f8cdde57379f90cb03bbb9ea) is corrupt
我可以尝试销毁松散的对象,但我不确定它是否是指向(例如树)的更多损坏对象的指针,这些对象也必须被销毁。如果我知道推荐,我当然可以尝试销毁这个对象(或者可以尝试rm
备份它);我应该试试吗?
此外,我将如何从这个混乱中修复 USB 密钥和其他 repo?谢谢。
(对新手可能有用的参考资料,不太可能帮助有能力回答这个问题的人:https ://aboullaite.me/deep-dive-into-git-git-refs/ )(类似的问题致命:您当前的分支似乎已损坏-- 没有说明错误的原因;很多事情都可能导致这个错误)
编辑:
我rm .git/objects/...
为上面列出的每个对象都做了,现在我有......
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (1147/1147), done.
error: refs/remotes/origin/HEAD: invalid sha1 pointer 0000000000000000000000000000000000000000
error: refs/remotes/origin/master: invalid sha1 pointer 0000000000000000000000000000000000000000
error: HEAD: invalid reflog entry 8f1da374ffac3711f8cdde57379f90cb03bbb9ea
error: refs/heads/master: invalid reflog entry 8f1da374ffac3711f8cdde57379f90cb03bbb9ea
error: bad ref for .git/logs/refs/remotes/origin/HEAD
error: bad ref for .git/logs/refs/remotes/origin/master
error: ac2fcd052804fb7adac465220da5bcb04d008fc7: invalid sha1 pointer in cache-tree
broken link from tree b0d598ef5427d59ed31eb1b315c761fc89af40b7
to tree ac2fcd052804fb7adac465220da5bcb04d008fc7
dangling blob f4e39c36cc8df3f9f324c0ccca4ed6a7a3ffe6ac
dangling tree 068716abcf815b4eaf8f0fe74c3020bf6251bba0
dangling blob fb4cfe7c94e8b4d800fdb4935806577b2b99fd94
dangling blob 35cf2ca2ed03811c14f1598c50daacfab9032b8f
missing tree ac2fcd052804fb7adac465220da5bcb04d008fc7
dangling blob d056e38af637cf0de76dac5689a8c5e735d75793
dangling blob 3b3903cc7b4eb035e9c4508024acc3f81c015741
dangling blob b09c3cc95935a327ecf7fad8374f14c4e320f67e