我的.git repo的HEAD提交对象因机器崩溃而丢失:
$ git rev-parse HEAD
1f411c372caab4767638df0b47be5e2f576cb582
$ git reflog
error: object file .git/objects/1f/411c372caab4767638df0b47be5e2f576cb582 is empty
fatal: loose object 1f411c372caab4767638df0b47be5e2f576cb582 (stored in .git/objects/1f/411c372caab4767638df0b47be5e2f576cb582) is corrupt
事实证明只有少数文件被破坏,但由于HEAD提交是其中之一,我无法找到前一次提交的哈希。
然而,我对reflog的理解是它保留了HEAD所有更改的历史记录,即使它们无法访问,所以我希望在.git中有一个位置,我可以在其中找到以前的哈希值,并且我&#39 ;惊讶的reflog失败了。
有没有办法手动转储reflog并可能很容易恢复?
如果我只放弃最后一次提交(或者甚至是最后几次提交),我真的不在乎,因为我的工作目录没问题。但是,自从我推到服务器以来,我不想失去所有过去4天。
如果我能找到合适的SHA,我只需使用
即可恢复git checkout -B recovery
继续我的快乐方式。
谢谢!
P.S。是的,我可以将我的工作目录视为过去4天工作的简单压制,但如果可能的话,我更愿意捕获历史记录。
更新。仅供参考:我如何使用答案实际恢复:
tail .git/logs/HEAD
8030ad73461b75e3ce575d5896a9511f6036e45d 1f411c372caab4767638df0b47be5e2f576cb582 REDACTED 1432014000 -0700 commit: REDACTED
git branch -f recovery 8030ad73461b75e3ce575d5896a9511f6036e45d
echo "ref: refs/heads/recovery" > .git/HEAD
答案 0 :(得分:1)
查看文件.git/logs/HEAD
的底部,该文件会跟踪HEAD
的所有更改。
(并在.git/logs/refs/heads/
中的文件中跟踪分支更改。)