【发布时间】:2019-11-02 04:44:16
【问题描述】:
问题:
- 不小心执行了 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 一样简单吗?如果
如果是这样,我是否应该销毁有问题的提交(这样它以后就不会破坏东西,比如git-repack 或其他东西)?
当我尝试less .git/logs/refs/heads/master 并从表单的最后一行获取 [edit:typo] first 哈希时...
...
[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/) (类似问题fatal: your current branch appears to be broken -- 没有说明错误原因;很多事情都可能导致这个错误)
编辑:
我为上面列出的每个对象都做了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
【问题讨论】:
标签: git corruption git-amend reflog