GIT:致命:提交时无法解析 HEAD 错误

问题描述 投票:0回答:5

当尝试提交时

git commit -a -m "Huge update"

我明白了

致命:提交时无法解析 HEAD 错误

阅读完致命:提交时无法解析 HEAD 错误我命令

 git symbolic-ref HEAD refs/heads/master

但没有输出,但我确实得到了

$ git fsck
Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer c45fd8579e1f313fcd651df4cbafbf6c8f8edba6
error: refs/heads/master does not point to a valid object!
error: refs/remotes/origin/master does not point to a valid object!
notice: No default references
broken link from  commit f10ca5f9234acb473ee000414e2c7d4e939b5e57
              to    tree 08a537c82c15e09badb41540ceadfb6ac1a8bb31
dangling blob 03165e2de43b743cfe049c40d0ede67fcfb3cc50
missing tree 08a537c82c15e09badb41540ceadfb6ac1a8bb31
dangling blob 1d5469bbebc0a347feef8c0d04fdbf54d87c0a84
dangling blob 1d29ed6cbea9e49273f072de1c61d6893c60a938
dangling blob 259577cbf5a72f6a3565fabb8ce84dc1c7953263
missing blob 3e2a6250392ee3148da37c6c140fc27302125efd
dangling blob 5474b368e2be10dc252d9e21942e748b2d87bd8c
dangling blob 743f1a142592da8050327a6d2e8acc9b5caface7
dangling blob 74823e581bb2cd05256fb4c53109ab6690164077
dangling blob 8399f1b02b73271337addc62e1cc0655a3437a9e
missing blob 99e63739e12ac210f709cc7d5426b46c6b869b65
dangling blob ba11541ed0813e1310b0d721c558f77197854f1f
dangling blob bab5ebd6dfda1be835d15c7704e192e6a9372404
missing blob ca265d70b113843c3080fcb29e14ddb7c50c55a2
missing commit d5750c2c0c209f95d1d6bbd8f763756302fa31b9
dangling blob ebfe8060c0c12ec4b9c7ebebcedbf6c33f435a32
dangling blob f16d2a532c3720bbeb14334a47dc5835532d9841

我可能错了,但我认为 git 告诉我去操我自己:-D...:,-/。以下内容似乎证实了这一点:

$ git status
fatal: bad object HEAD
$ git checkout master
fatal: Reference is no "Tree"-object: master
$ git fetch
error: refs/heads/master does not point to a valid object!
error: refs/remotes/origin/master does not point to a valid object!
$ git reflog master
fatal: bad object master
$ git reflog HEAD
fatal: bad object HEAD

还有办法与git协调吗?

我也明白了

$ cat .git/refs/heads/master
c45fd8579e1f313fcd651df4cbafbf6c8f8edba6
$ cat .git/refs/remotes/origin/master
c45fd8579e1f313fcd651df4cbafbf6c8f8edba6
git
5个回答
6
投票

您的本地存储库似乎发生了一些不好的事情。

看看一个简单的

git fetch
是否可以帮助您找回一些丢失的物品。


您可以创建远程存储库的新克隆吗,并检查:

  • 如果
    refs/remotes/origin/master
    仍然指向
    c45fd85...
    ,或者如果它的历史中有
    c45fd85...
  • 如果
    c45fd85...
    存在并且是一个有效的对象? (
    git fsck
    ,
    git cat-file -p c45fd85
    )

2
投票

我有同样的问题,我阅读了这里的每个答案,但没有任何帮助。但是,当我删除项目目录中的“.git”文件夹并重新初始化时,问题就消失了。我希望这也能帮助你。


1
投票

refs/heads/master
文件是一个引用,应该指向有效的提交哈希。由于某种原因,您的 master 指向您的存储库中不存在的
c45fd8579e1f313fcd651df4cbafbf6c8f8edba6
。可能是这个对象以某种方式从
.git/objects
目录中删除了,也可能是
master
指向了一个从未存在过的哈希值。在我知道你做了什么之前我无法确定。
git reflog master
git reflog HEAD
可能会提供一些有关发生了什么的线索,但我不能确定。

我的猜测是你的

.git
目录被篡改了。我看到有几个缺失的提交。这不是一个好兆头。如果您已将存储库安全推送到某个位置,则再次克隆是解决问题的一种方法。如果
reflog
命令为您提供有用的输出,您可以强制将 (
git reset --hard
) 您的 master 重置为之前的提交 (
git reset --hard master@{1}
),然后再次尝试获取。希望它能带来所有缺失的提交。这将破坏最新的提交,但考虑到它无论如何都是悬而未决的,我认为你不会损失太多。


0
投票

我在删除此处提到的空对象后到达这里:

如何修复 Git 错误“目标文件...为空”?

移除空物体后,情况变得更糟。最后,我通过这样做解决了这个问题:

git reset --hard origin/master

0
投票

我知道这是一个老问题,但如果它对其他人有帮助......

我有类似的问题,不想失去我的工作(我实际上想创建一个提交并推送我的更改!)

所以我删除了我的

.git
存储库,然后执行了以下命令

$ git init
$ git remote add origin https://url.git
$ git reset --soft origin/master
$ git add .
$ git commit -m "my commit"

重要的是使用“软重置”将本地存储库与远程存储库同步。这样,您将保留所有本地更改(尽管它们将被取消暂存),并且您将能够为您的提交再次添加它们。 如果您按照另一个答案中的建议进行

硬重置

,您将丢失所有本地更改。

© www.soinside.com 2019 - 2024. All rights reserved.