Git refs / remotes / origin / master不指向有效对象

时间:2012-12-14 15:28:59

标签: git

在我最后一次合并到我的Git存储库的主分支后,我失去了克隆存储库的能力。

Cloning into test-repository...
remote: Counting objects: 126084, done.
remote: Compressing objects: 100% (28327/28327), done.
Receiving objects: 100% (126084/126084), 132.63 MiB | 29.30 MiB/s, done.
remote: Total 126084 (delta 96101), reused 126078 (delta 96095)
Resolving deltas: 100% (96101/96101), done.
error: refs/remotes/origin/master does not point to a valid object!
error: Trying to write ref refs/heads/master with 
       nonexistant object 951aca8051823b2f202d30c9cb05401ef17618c6

Fisheye是一个存储库托管工具,正在报告:

Unable to fetch from remote repository:
/var/atlassian/application-data/fisheye/managed-repos/MYREPONAME.git
error: unable to find 0d998c99b6d01e8aabca72b1934802acf90b8fc9,
fatal: object 0d998c99b6d01e8aabca72b1934802acf90b8fc9 not found

master分支上的存储库中的最后一次提交是:

commit 0d998c99b6d01e8aabca72b1934802acf90b8fc9
Merge: a6ea4b3 1f373a9
Date:   Fri Dec 14 13:57:24 2012 +0200

Merge branch 'new_error_code'

我试过了:

cd /var/atlassian/application-data/fisheye/managed-repos/MYREPONAME.git
git gc
git fsck --full
git reflog expire --expire=0 --all
git update-ref
git gc --aggressive

以下问题对我的案例没有帮助:

4 个答案:

答案 0 :(得分:35)

git gc
git fsck --full
git reflog expire --expire=0 --all
git update-ref -d 0d998c99b6d01e8aabca72b1934802acf90b8fc9
git gc --aggressive
git remote update --prune

它有效!

答案 1 :(得分:1)

通常你可以这样做:

git reflog master

这将为您提供主人指向的最后知道位置的列表。

一旦你知道这一点,你就可以创建一个临时分支到旧版本的主,即

git branch temp master@{1}

然后结帐临时并查看它是否处于正确的顺序。如果您没有看到任何内容,那么您之前执行的命令(删除reflog,删除悬空提交等)可能已经消除了所有恢复方法。

答案 2 :(得分:1)

为 Matt Harasymczuk 的回答提供解释:

执行垃圾收集,以便 Git 清理自己造成的混乱(More info on git gc here)

git gc

验证数据库中对象的连通性和有效性(More info on git fsck here)

git fsck --full

从参考日志中删除所有条目 (More info on git reflog here)

git reflog expire --expire=0 --all

删除对命名哈希(More info on git update-ref here)的引用

git update-ref -d <your hash here>

再次运行垃圾收集,丢弃所有旧的增量。这将比第一次花费更长的时间,但在优化存储库方面要彻底(More about aggressive garbage collection here)

git gc --aggressive

更新远程列表,删除对不再存在的分支的引用(More about git remote here)

git remote update --prune

答案 3 :(得分:0)

我在执行 go buildgo mod tidygo run 时遇到了类似的问题。所有命令都给我同样的错误,

'错误:refs/stash 没有指向有效的对象!'

我尝试了以下许多方法,包括上面给出的答案。

  1. git remote prune origin
  2. git stash
  3. rm .git/refs/stash .git/logs/refs/stash

什么都不适合我。最后,我删除了系统中路径 $GOPATH/go/pkg/mod/cache/ 下的所有缓存,并且我能够解决这些问题。