git status显示致命:坏对象HEAD

时间:2013-11-28 10:49:23

标签: git github

我在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

15 个答案:

答案 0 :(得分:32)

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

然后从其他克隆

复制 .git

cp <pathofotherrepository>/.git . -r

然后做

git init

这应该可以解决你的问题,所有最好的

答案 1 :(得分:31)

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

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

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

请注意,使用git本身并不足以保证数据安全。在腐败的情况下,你仍然需要备份它。

答案 2 :(得分:16)

运行

git remote set-head origin --auto

跟着

git gc

答案 3 :(得分:11)

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

using (AdomdConnection con = new AdomdConnection(connection_string))
{
  con.Open();

  using (AdomdCommand command = new AdomdCommand(query, con)) 
  {
    using (AdomdDataReader reader = command.ExecuteReader()) 
    {
         var dataTable = new DataTable();
         dataTable.Load(dataReader);
         //business logic:
         //After loading the datatable, do the cleansing here and finally send to frontend 
    }
  }
}

就解决了。

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

答案 4 :(得分:10)

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

重新初始化git

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.min.js" integrity="sha384-u/bQvRA/1bobcXlcEYpsEdFVK/vJs3+T+nXLsBYJthmdBuavHvAW6UsmqO2Gd/F9" crossorigin="anonymous"></script>
<div class="container-fluid d-flex h-100 flex-column vh-100">
    <!-- I want this container to stretch to the height of the parent -->
    <div class="row">
        <div class="col choose-plot">
        <strong class="mb-2">Add/remove COUNTRIES (max: 5), ADVERTISES (max 4), YEAR (max 1), and plot location below. Then, click 'load plot'.</strong>
            <div class="row">
              <div class="col-4">
                <select class="custom-select">
                  <option>Choose plot</option>
                </select>
              </div>
              <div class="col-8">
                <button class="btn btn-primary">Load plot</button>
              </div>
            </div>
        </div>
    </div>
    <div class="row flex-fill d-flex justify-content-start">
        <div class="col-6 bordered">1 of 4</div>
        <div class="col-6 bordered">2 of 4</div>
        <div class="col-6 bordered">3 of 4</div>
        <div class="col-6 bordered">4 of 4</div>
    </div>
</div>

从远程

获取数据
git init

现在按

检查所有更改和git状态
git fetch

答案 5 :(得分:8)

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

答案 6 :(得分:4)

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

  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. 删除克隆&amp;备份(如果一切正常):rm -r your_repository_*

答案 7 :(得分:3)

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

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

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

fatal: bad object HEAD.

您可以尝试遵循我从那时起所做的事情。确保首先备份整个文件夹。

当然,您的存储库可能会以完全不同的方式被破坏,而我所做的并不能解决您的问题。但它可能会给你一些想法! Git内部看起来很神奇,但它实际上只是一堆文件,可以像其他文件一样进行编辑,移动,删除。一旦你很清楚他们做了什么以及他们如何融合在一起,你就有很大的成功机会。

答案 8 :(得分:2)

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

答案 9 :(得分:0)

在本地主机中制作git目录的副本,然后再次运行git init。将项目推向一个全新的代表。

答案 10 :(得分:0)

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

在终端和运行时以某种方式:git status,告诉我更多特定数据发生错误的位置。如果你查看错误,希望你看到一个错误的文件夹列表。在我的情况下,GIT显示了导致错误的文件夹。删除该文件夹并提交分支,我成功了。 git状态再次起作用 其他设备通过git pull更新;一切都在每台机器上运行。

希望这也适合你。

答案 11 :(得分: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提交的所有实际内容所在的地方。

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

enter image description here

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

答案 14 :(得分:-1)

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