我的git存储库已经不知何故了 - 我今天早上加载了msysgit而不是在当前目录之后显示的分支名称,它说“((ref:re ...))”,“git status”报告作为一个新文件的所有内容,'git log'和'git reflog'告诉我“致命:错误的默认修订'HEAD'”,等等。
做'git reflog --all'或'gitk --all'告诉我存储库的其余部分是完整的,但看起来我正在处理的分支刚刚消失,这解释了为什么HEAD看起来不像存在/指向任何东西。
我知道git会抓住各种各样的信息,而且我认为我的提交已经以某种方式成为孤儿,所以是否有一些命令会向我显示这些提交以便我可以将HEAD重置为它们?
编辑:哦,亲爱的。我发现'git fsck'和'git fsck --full'报告“致命:对象03ca4 ......已损坏”。我能为此做些什么? 编辑:亲爱的哦亲爱的。我检查了另一个分支,然后尝试使用'git checkout -b lostbranchname'重新创建具有相同名称的原始分支,并且git说“错误:无法解析引用引用/ heads / lostbranchname:没有错误,致命:失败锁定ref以进行更新:没有错误“。 “没有错误”必定是一个特别令人讨厌的错误。所以看起来它仍然在闲逛,但无法使用,也无法被杀死。 编辑:超级亲爱的哦亲爱的。我做了一堆解包和重新打包并替换了这里建议的东西:How to recover Git objects damaged by hard disk failure?,但现在我得到另一个哈希报告为腐败,因为某些东西像'git status'一样无害。我认为整个事情都是有道理的。 Git很可爱,但我不应该处理这类事情。答案 0 :(得分:118)
我认为我会回答自己的问题,而不是保持开放。使用git reflog --all
是浏览孤立提交的好方法 - 并使用可以重建历史记录的SHA1哈希值。
在我的情况下,存储库已损坏,因此这没有帮助; git fsck
可以帮助您查找并有时修复存储库本身的错误。
答案 1 :(得分:14)
使用git 2.9.x / 2.10(2016年第3季度),您不必再使用git reflog --all
,git reflog
就够了。
commit 71abeb7见SZEDER Gábor (szeder
)(2016年6月3日)
(由Junio C Hamano -- gitster
--于commit 7949837合并,2016年7月6日)
reflog
:继续走过reflog
过去的根提交如果存储库包含多个根提交,则其HEAD reflog可能包含多个“创建事件”,即“from”值为空sha1的条目。
列出这样的reflog当前在第一个这样的条目中过早地停止,即使reflog仍包含较旧的条目 这可能会吓到用户认为他们的reflog在“git checkout --orphan
”之后被截断了。继续将reflog引导到基于此类的创建事件 在reflog条目的“新”值之前。
答案 2 :(得分:4)
我通常会发现git reflog
的输出令人困惑。对我来说,从git log --graph --reflog
理解提交图要容易得多。覆盖log
格式以仅显示提交摘要也可以使图形更易于遵循:
$ git config --global alias.graph "log --graph --all --format='%h %s%n (%an, %ar)%d' --abbrev-commit"
$ git graph --reflog
* f06abeb Add feature
| (Sue Dakota, 4 days ago) (HEAD -> master)
* f126291 Fix the build
| (Oski M. Wizard, 5 days ago) (origin/master, master)
* 3c4fb9c Break the build
| (Alyssa P. Hacker, 5 days ago)
| * e3124bf fixup! More work for feature
| | (Sue Dakota, 4 days ago)
| | * 6a7a52e Lost commit
| |/ (Sue Dakota, 4 days ago)
| * 69d9438 More work for feature
| | (Sue Dakota, 2 weeks ago)
| * 8f69aba Initial work for feature
|/ (Sue Dakota, 3 weeks ago)
* d824fa9 Fix warnings from the linter
| (Theo Ristudent, 4 weeks ago)
* 9f782b8 Fix tests flakes
| (Tess Driven, 5 weeks ago)
由此可见,e3124bf
和6a7a52e
是未引用的孤儿,并且它们的祖先提交具有上下文。
答案 3 :(得分:3)
git的一个很好的功能是它可以检测到损坏。但是,它不包括纠错以防止损坏。
我希望您已将此存储库的内容推送到另一台计算机,或者您已备份以恢复损坏的部分。
我对Windows上的git没有任何经验,但在Linux或OS X上从未见过使用git的这种行为。