代码之家  ›  专栏  ›  技术社区  ›  Ben Hymers

在Git中浏览孤立提交

git
  •  86
  • Ben Hymers  · 技术社区  · 15 年前

    我的Git存储库有点不稳定-我今天早上加载了msysgit,它显示的不是当前目录后面显示的分支名称,而是“((ref:re…)”,“Git状态”将所有内容报告为新文件、“Git日志”和“Git ref log”告诉我“致命:错误的默认修订版”head“,等等。

    执行“git reflog--all”或“gitk--all”会向我显示存储库的其余部分是完整的,但看起来我正在处理的分支刚刚消失,这就解释了head似乎不存在/指向任何东西的原因。

    我知道Git掌握着各种各样的信息,我假设我的提交已经被某种方式孤立了,那么是否有一些命令可以显示这些提交,以便我可以重新设置它们的头部?

    编辑:哦,亲爱的。我发现了“git fsck”和“git fsck--full”报告“致命:对象03ca4…已损坏”。我该怎么办?

    编辑:哦,天啊,天啊。我签出了另一个分支,然后尝试使用“git checkout-b lostbranchname”重新创建具有相同名称的原始分支,git说“错误:无法解析引用refs/heads/lostbranchname:无错误,致命:无法为更新锁定ref:无错误”。“没有错误”一定是一个特别严重的错误。所以看起来它仍然在附近,但不能被使用,也不能被杀死。

    编辑:超级杜珀哦,亲爱的。我已经完成了一系列的拆箱、重新包装和替换工作,如下所示: How to recover Git objects damaged by hard disk failure? 但是现在我得到了另一个hash报告,它被认为是损坏的,因为它是无害的,比如“git status”。我想整件事都是用水管冲洗的。吉特很可爱,但我不该处理这种事情。

    3 回复  |  直到 9 年前
        1
  •  112
  •   Steve Chambers    11 年前

    我想我会回答我自己的问题,而不是把这个问题公开。使用 git reflog --all 是浏览孤立提交的一个好方法——并使用sha1散列,从中可以重建历史记录。

    但在我的情况下,存储库已经损坏,所以这没有帮助; git fsck 可以帮助您查找和修复存储库本身的错误。

        2
  •  13
  •   VonC    9 年前

    使用Git 2.9.x/2.10(2016年第3季度),您不必使用 git reflog --all 不再, git reflog 就够了。

    commit 71abeb7 (2016年6月3日) SZEDER Gábor ( szeder ) .
    (合并) Junio C Hamano -- gitster -- 在里面 commit 7949837 2016年7月6日)

    reflog :继续走 重新浮起 过去的根提交

    如果一个存储库包含多个根提交,那么它的head reflog可能包含多个“创建事件”,即“from”值为空sha1的条目。
    列出这样的reflog当前会在第一个这样的条目处过早停止,即使reflog仍然包含较旧的条目。
    这可能会吓唬用户,让他们认为他们的reflog在' git checkout --orphan '.

    继续在基于 前一个重新记录项的“new”值。

        3
  •  3
  •   Jamey Hicks    15 年前

    Git的一个好特性是它可以检测到损坏。但是,它不包括防止腐败的错误更正。

    我希望您已经将此存储库的内容推送到另一台计算机上,或者您有备份来恢复损坏的部分。

    我没有在Windows上使用Git的经验,但在Linux或OSX上从未见过这种使用Git的行为。