git status显示致命信息:HEAD坏对象


71

我在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本身是坏的,而是它最终指向的东西。
Ikke

我有同样的错误-但git fsck已经为我解决了。感谢😅–
Tillus

Answers:


45

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

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

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

请注意,仅使用git本身不足以确保数据安全。如果发生损坏,您仍然需要备份它。


67

试试这个:为我工作 rm -rf .git

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

然后从其他克隆复制.git

cp <pathofotherrepository>/.git . -r

然后做

git init

这应该可以解决您的问题,一切顺利


我一直在寻找一个棘手的git命令,但是毕竟,这个命令足够快捷,干净。
YB原因

4
有用!谢谢!但是有一个警告……您将丢失所有不在您的工作目录中的内容(本地分支,存储等)。也许您想使用mv替代方法rm -rf来尝试稍后恢复;-)
费尔南多·阿尔梅达

@FernandoAlmeida是的,如果您真的想要恢复,可以使用mvinstaed rm,谢谢朋友:-)
ganesh

我认为这应该是公认的答案。虽然Ikke提供了很好的信息,但这是dotnetrocks一直在寻找的解决方案……
Michael P

精美如魔咒:精湛。如果有人对我特别感兴趣,可以使用几个最终命令:git pull origin master --allow-unrelated-histories | git checkout --ours [您的主文件夹] /(或--theirs:接受远程版本。--ours接受本地版本)| git状态| git add --all | git状态| git commit -m“ git损坏文件后的第一次提交” | git push origin master>非常感谢,太好了,很好的解决方法:))
Vladimir Brasil

30

发生这种情况是因为我错误地删除了一些GIT核心文件。试试这个对我有用。

重新初始化git

git init

从远程获取数据

git fetch

现在通过检查所有更改和git状态

git status

遇到段错误时,我必须升级git(自制程序)。之后git fetch,我必须做一个git pull快速前进(它说我的树在HEAD后面),然后git status才能显示任何有用的信息。
kakyo

16

跑步

git remote set-head origin --auto

其次是

git gc

7
这个!我的起源是它的主分支从改名mastermain。这个答案解决了这个问题。
伊恩·巴拉德

添加git fetch,然后git merge origin/HEADgit push为我工作。
thebtm '20

12

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

  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_*

4
这个答案只是汇总了@serup@ganesh的答案
jan-glx

12

就我而言,错误无处不在,但没有让我推送到远程分支。

git fetch origin

这就解决了。

我同意这可能无法解决每个人的问题,但是在尝试更复杂的方法之前,请先尝试一下,没有什么松懈的。


3
在计算机之间进行部分文件同步后,经常会出现此错误。这为我每次都修复。
莱昂内尔·亨利

我也感到困惑和烦恼,文件同步是如何工作的,我在Dropbox和Megasync中遇到了类似的麻烦。这git的目录应该是有两个节点同步 du -s .git在CLIENT1是4.2M3.8M在客户端2我不知道为什么或如何同步客户管理跳过git的目录文件...
义隆Ruusamäe

9

我有一个类似的问题,对我有用的是从原始存储库中创建一个新克隆


1
我在使用VS2017(15.3.3)和git的Windows 10崩溃后结束了本文。我没有任何待处理的更改,因此使用上述@serup的答案,特别是我:-删除了根解决方案文件夹“ C:\ Code \ MySolution”(其中包含.git作为子文件夹)。-然后从VSTS | 项目= MySolution | 代码 在主分支页面上,单击“克隆”按钮,然后选择“在Visual Studio中克隆”-输入相同的位置“ C:\ Code \ MySolution”。一切都非常简单(最后)。
彼得

这意味着您失去了当地分支机构,不是吗?
BernhardDöbler19年

3

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

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

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

fatal: bad object HEAD.

从那时起,您可以尝试遵循我的操作。确保首先备份整个文件夹。

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


2

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


0

在本地主机中复制git dir并在git init此处再次运行。将项目推向崭新的世界。


0

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

在终端中以及运行时的某种方式:git status,告诉我更具体的数据发生错误的位置。如果您在错误下查找,希望您会看到有错误的文件夹列表。在我的情况下,GIT显示了负责该错误的文件夹。删除该文件夹并提交分支,我成功了。git status再次正常工作,其他设备通过git pull更新;一切又在每台机器上运行了。

希望这也对您有用。


0

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

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

如果要删除所有obj文件夹,请不要懒惰,不要随意.git/objects混入。该文件夹是git commit的所有实际内容所在的位置。

快要放弃之后,我决定查看回收站中有哪些文件。恢复了文件,我的本地存储库就像新的一样。


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.