【问题标题】:git status shows fatal: bad object HEADgit status 显示致命:坏对象 HEAD
【发布时间】:2013-12-14 08:49:31
【问题描述】:

我在 Windows Azure 上遇到了 git 问题。 Git 状态显示 - “致命:坏对象 HEAD”,我尝试运行:

 git fsck --full
 git gc

但是git fsck 显示:

broken link from  commit 739df633f185ce5d1ab7eb97d619b28e7d81185a
              to    tree 2a6d4876d135c1fa7cbe1348c62570006e895fc5
broken link from  commit 9c7eae5ffed34dbfac977e515dee675626b59f93
              to    tree 400132d215ab9aced883a9971e648b82624b2032
broken link from  commit 9c7eae5ffed34dbfac977e515dee675626b59f93
              to  commit 4a49af0a0cb64a0a0415734b11772d6df18561fb
broken link from  commit bc3072f30e71c616a8196089e19a67a2c9c0a5ad
              to    tree 0aa813c183487d0a1b1f7ae81501ca7a1168283f
broken link from  commit d3bb4f8545e91ec8ace15ad31a3147d92a1d4242
              to    tree 4682108accd8e72fe68858232386dffe60f9f02d
broken link from  commit 6b34795c4b54286301bcdc0ed254a04c132cb2ad
              to    tree 5c57dd3222d11924dba841d3cae517bdc9220601
broken link from  commit d70172d855391b93bc1c5eeb9b4226df525dfc6e
              to  commit 390c8cbd527c8e707c51e25142e54421f4dd3948
broken link from  commit cc05e8d2e3733693ebb67d697ae4b65e51fea79a
              to  commit 32f081f8b901425fd1e8898478f0551970bee0f5
broken link from    tree 6a75ed6d0311d800078e77f43d427d128372d5bc
              to    blob 4a064d610c0e7207967d59934c8bc5f491f26dae
broken link from    tree 6a75ed6d0311d800078e77f43d427d128372d5bc
              to    tree 5c06ec964dcbade49287d0f36efe1f7b60f446e3
broken link from    tree b4855fa6734b5652a93a9b799eafe47fad0d13a0
              to    blob 3e1fb421613dc9066cbf9c95eddc61619a9f8eed
broken link from    tree b4855fa6734b5652a93a9b799eafe47fad0d13a0
              to    tree 556a50048d42346c283c94b78ea278ba1d57d251
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3abf3c48ada45f63404dcf4d675ddfdadcfa83c6
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3fa569892003b468ed1301426dd6d96d9644be3c
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 0a9a54a51e84f3bc34122dbce1146d895fcbe22c
broken link from    tree 289c03409370c4ca7c12266ce2822a2976bd032b
              to    blob 3fa48873564361b4d95830803ae77f79eeafaf5b

git branch 显示 - *master

【问题讨论】:

  • 看起来存储库在文件系统级别上已损坏。要恢复 HEAD,你可以写一些对.git/HEAD 有意义的东西,比如739df633f185ce5d1ab7eb97d619b28e7d81185aref: refs/heads/master(如果master 分支是可以的)。但它不太可能修复存储库。
  • 我不认为 HEAD 本身坏了,而是它最终指向的东西。
  • 我遇到了同样的错误 - 但git fsck 已经为我修复了它。谢谢??????

标签: git github


【解决方案1】:

试试这个;它对我有用(警告:这会破坏仅存在于本地仓库中的工作):

rm -rf .git

如果您不想丢失隐藏的提交,可以使用 mv 而不是 rm

然后从其他克隆复制 .git

cp <pathofotherrepository>/.git . -r

然后做

git init

这应该可以解决您的问题, 最好的

【讨论】:

  • 我一直在寻找一个棘手的 git 命令,但毕竟这个命令足够快速和干净。
  • 有效!谢谢!但是有一个警告......您将丢失所有不在您的工作目录中的东西(本地分支,存储等)。也许您想使用mv 而不是rm -rf 来尝试恢复以后的东西;-)
  • @FernandoAlmeida 是的,没错,如果你真的想恢复,你可以用mv代替rm,谢谢哥们:-)
  • 我认为这应该是公认的答案。虽然 Ikke 提供了非常好的信息,但这是 dotnetrocks 正在寻找的修复程序......
  • 您是否意识到使用rm -rf .git 您将丢失所有尚未推送到远程的存储和分支。
【解决方案2】:

您的存储库已损坏。这意味着丢失了 git 本身无法恢复的数据。如果您有此存储库的另一个克隆,您可以从那里恢复对象,或创建一个新的克隆。

fatal: bad object HEAD 表示从 HEAD 引用的分支指向错误的提交对象,这可能意味着它丢失或损坏。

git fsck 的输出中,您可以看到缺少一些树、blob 和提交对象。

请注意,使用 git 本身并不足以保证数据安全。如果发生损坏,您仍然需要对其进行备份。

【讨论】:

    【解决方案3】:

    这是因为我错误地删除了 GIT 的一些核心文件。试试这个它对我有用。

    重新初始化 git

    git init
    

    从远程获取数据

    git fetch
    

    现在检查您的所有更改和 git 状态

    git status
    

    【讨论】:

    • 遇到段错误时我不得不升级 git (homebrew)。在git fetch 之后,我必须做一个git pull 快进(它说我的树在HEAD 后面),然后git status 才能告诉我任何有用的东西。
    • 今天拯救了我的一天。
    • @bakunet 乐于提供帮助 :)
    【解决方案4】:

    跑步

    git remote set-head origin --auto
    

    紧随其后

    git gc
    

    【讨论】:

    • 这个!我的起源将它的主要分支从master 重命名为main。这个答案解决了这个问题。
    • 添加git fetch,然后git merge origin/HEAD 然后git push 为我工作。
    【解决方案5】:

    在我的情况下,错误突然出现,但没有让我推送到远程分支。

    git fetch origin
    

    这样就解决了。

    我同意这可能无法为每个人解决问题,但在尝试更复杂的方法之前先试一试,不要松懈。

    【讨论】:

    • 在计算机之间进行部分文件同步后,我经常收到此错误。这每次都为我修复它。
    • 我也对文件同步的工作方式感到困惑和恼火,我在使用 Dropbox 和 Megasync 时遇到过这样的麻烦。这个 .git 目录应该与 client1 上的两个节点 du -s .git 同步,在 client2 上是 4.2M3.8M 我不知道同步客户端为什么或如何设法跳过 .git 目录中的文件...跨度>
    【解决方案6】:

    您的存储库已损坏。但您可能可以修复它并保留您的编辑:

    1. 先备份:cp your_repository your_repositry_bak
    2. 克隆损坏的存储库(仍然有效):git clone your_repository your_repository_clone
    3. 将损坏的 .git 文件夹替换为来自克隆的文件夹:rm -rf your_repository/.git && cp your_repository_clone/.git your_repository/ -r
    4. 删除克隆和备份(如果一切正常):rm -r your_repository_*

    【讨论】:

    【解决方案7】:

    我遇到了类似的问题,对我有用的是从我的原始存储库制作一个新的克隆

    【讨论】:

    • 我在使用 VS2017(15.3.3) 和 git 时出现 Windows 10 崩溃后来到这里。我没有任何待处理的更改,因此使用上面的@serup 答案,特别是我: - 删除了根解决方案文件夹“C:\Code\MySolution”(包含 .git 作为子文件夹)。 - 然后来自 VSTS |项目=我的解决方案 |代码 |主分支页面,我单击“克隆”按钮并选择“在 Visual Studio 中克隆” - 我输入了相同的位置“C:\Code\MySolution”。一切都非常简单(最后)。
    • 这意味着您失去了本地分支机构,不是吗?
    【解决方案8】:

    当一些 git 的文件损坏时,我设法解决了与此类似的问题:

    https://stackoverflow.com/a/30871926/1737957

    在我对该问题的回答中,查找与此处出现相同错误消息的部分:

    fatal: bad object HEAD.
    

    您可以尝试按照我从那时起所做的事情。请务必先备份整个文件夹。

    当然,您的存储库可能以完全不同的方式损坏,而我所做的不会解决您的问题。但它可能会给你一些想法! Git 内部结构看起来很神奇,但它实际上只是一堆可以像其他任何文件一样编辑、移动、删除的文件。一旦您对他们的工作以及它们如何组合在一起有了很好的了解,您就有很大的成功机会。

    【讨论】:

      【解决方案9】:

      我通过执行 git fetch 解决了这个问题。我的错误是因为我将文件从主存储移动到 Windows 10 上的辅助存储。

      【讨论】:

        【解决方案10】:

        在您的本地主机中复制您的 git 目录并再次在那里运行git init。将项目推送到一个全新的存储库。

        【讨论】:

          【解决方案11】:

          我通过将分支数据(带有错误)复制到我的苹果笔记本电脑本地 git 文件夹来解决这个问题。

          不知何故在终端和运行时:git status,告诉我更具体的数据错误发生在哪里。如果您查看错误,希望您会看到有错误的文件夹列表。在我的情况下,GIT 显示了导致错误的文件夹。删除该文件夹并提交分支,我成功了。 git status 又开始工作了 通过 git pull 更新的其他设备;一切都在每台机器上再次运行。

          希望这对你也有用。

          【讨论】:

            【解决方案12】:

            这不太可能是您的问题的根源 - 但如果您碰巧在 .NET 中工作,您最终会得到一堆 obj/ 文件夹。有时删除所有这些obj/ 文件夹以解决令人讨厌的构建问题会很有帮助。

            我在当前分支(master)上收到了相同的 fatal: bad object HEAD,但无法运行 git status 或签出任何其他分支(我总是收到 error refs/remote/[branch] does not point to a valid object)。

            如果您想删除所有obj 文件夹,请不要偷懒,让.git/objects 加入其中。该文件夹是 git 提交的所有实际内容所在的位置。

            在接近放弃之后,我决定查看我的回收站中的哪些文件,它就在那里。恢复了文件,我的本地存储库就像新的一样。

            【讨论】:

              【解决方案13】:

              这发生在我一个没有分支的旧简单项目上。我做了很多更改,当我完成后,我无法提交。 以上没有任何效果,所以我最终得到:

              1. 将所有代码与我的最新更改复制到备份文件夹中。
              2. Git 克隆以下载最新的工作代码以及工作 .git 文件夹。
              3. 使用备份中的最新更改复制了我的代码并替换了克隆的代码(不是 .git 文件夹)。
              4. git add 和 commit 再次工作,我有我最近的所有更改。

              【讨论】:

                【解决方案14】:

                就我而言,我尝试从远程存储库克隆到新的 TEST 本地存储库。然后使用新的 .git 文件夹替换“损坏的” .git 文件夹。 Ran git status 可以看到最新的差异。

                注意:使用 git add 检查本地文件夹和 repo 之间的差异。 -v。要在提交前撤消更改,请使用 git reset。您可能需要从在此操作开始时克隆的 TEST 本地存储库中带来“已删除”的文件。

                【讨论】:

                  【解决方案15】:

                  @jan-glx 的解决方案应该始终有效。我在这里添加了第 3 步。如果您在 master/main 以外的分支上工作,则需要这样做:

                  1. 先备份:cp your_repository your_repositry_bak
                  2. 克隆损坏的存储库:git clone your_repository your_repository_clone
                  3. (如果需要)切换到克隆 repo cd your_repository_clone && git checkout your_working_branch 中的工作分支
                  4. 将损坏的 .git 文件夹替换为克隆中的文件夹:rm -rf your_repository/.git && cp your_repository_clone/.git your_repository/ -r
                  5. (如果一切正常)删除克隆和备份:rm -r your_repository_*

                  【讨论】:

                    【解决方案16】:

                    我在使用子模块时遇到了这个问题

                    文件结构

                    -- Python.Hot
                    -----.git/
                    -----Python.OpticalTweezers/
                    -----Python.OpticalTweezersGUI/
                    -----.gitmodules
                    

                    问题

                    当我检查任何子模块的日志时,我遇到了这个问题。警告消息是“无法打开日志。libgit 报告:bad object xxxxxxx

                    一开始的几个版本都没有这个问题。

                    快照

                    【讨论】:

                    • git fsck --fullgit gc 似乎有效。在我使用这两个命令后,这个问题在以下提交中消失了。(在此操作之前的提交中仍然存在问题)
                    【解决方案17】:

                    我通过重命名文件 .git/refs/remotes/origin/HEAD 中的分支解决了这个问题。

                    【讨论】:

                    • 到什么和从什么?
                    猜你喜欢
                    • 2018-02-14
                    • 2014-11-05
                    • 2022-08-15
                    • 2016-06-25
                    • 2010-12-30
                    • 1970-01-01
                    • 2014-12-04
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多