为旧的git分支摆脱'…不指向有效的对象'

我有一个Git仓库,我的克隆似乎有一个旧的,不再存在的问题,分支。 我一直看到这个消息:

error: refs/heads/t_1140 does not point to a valid object!

我没有任何其他消息,回购协议工作正常。 没有任何操作阻止我在其他分支上工作,推动变化,拉动……等等。

我环顾四周,并没有明确的指示如何解决这个问题。 我试着执行git fsck --full但是我看不到任何错误。 只是在dangling ...消息的负载。

我也检查了我的.git/config ,没有提及这个分支,也检查了.git/refs/heads ,没有提到t_1140

任何想法如何摆脱这个错误?

PS我试图再次克隆我的回购,这似乎是我的Github回购的错误。 所以,我现在唯一能想到的就是把我的回购和再次交叉。

检查.git/refs/remotes/origin 。 他们在那里,上游不再有他们。 清理不再存在的遥控器

 git remote prune origin 

你也--dry-run在实际操作之前join--dry-run ,看看会是什么样子。

希望这可以帮助。

你的本地克隆可能是好的,问题是你的GitHub仓库中缺lesst_1140分支对象。

我也有这个问题,GitHub支持修复它,我想通过删除refs/heads/t_1140在他们的最后。

更新:我再次得到了与另一个分支的错误,我能够通过运行此命令修复它:

 git push origin :refs/heads/t_ispn982_master 

你应该得到这样的警告信息:

 remote: warning: Allowing deletion of corrupt ref. 

但损坏的分支将被删除

我经常遇到这个错误。 git远程修剪起源不适合我。

[更新。 AFAIU,我遇到这个问题,因为使用git备用。 假设我有回购A,注册为回购B的备用。当我在回购A中创build一个新分支br,并在回购B中以远程方式获取回购A时,git将创build一个远程参考.git / refs / remotes / A / br为新的分支。 当我删除repo A中的分支,并在相应的对象被垃圾收集后,我得到'错误:refs / remotes / A / br不指向有效的对象! ]

我已经写了这个脚本(更新处理打包裁判)删除摇晃的裁判( 如果提交存在validation使用信息)。

 #!/bin/sh set -e if [ $# -eq 0 ]; then dir="." else dir="$1" fi if [ ! -d "$dir" ]; then echo "not a dir: $dir" exit 1 fi if [ ! -d "$dir/.git" ]; then echo "not a git repo: $dir" exit 1 fi cd "$dir" files=$(find .git/refs -type f) for f in $files; do id=$(cat "$f") if ! git rev-parse --quiet "$id" \ >/dev/null 2>&1; then continue fi if ! git rev-parse --quiet --verify "$id^{commit}" \ >/dev/null 2>&1; then echo "Removing ref $f with missing commit $id" rm "$f" fi done if [ ! -f .git/packed-refs ]; then exit 0 fi packfiles=$(cat .git/packed-refs \ | grep -v '#' \ | awk '{print $2}') for f in $packfiles; do if ! git rev-parse --quiet --verify "$f" \ >/dev/null 2>&1; then continue fi id=$(git rev-parse "$f") if ! git rev-parse --quiet --verify "$id" \ >/dev/null 2>&1; then continue fi if ! git rev-parse --quiet --verify "$id^{commit}" \ >/dev/null 2>&1; then echo "Removing packed ref $f with missing commit $id" git update-ref -d $f fi done 

你说你有:

还检查了.git / refs / heads,并没有提及t_1140

这是非常令人惊讶的。 我只能看到如果文件.git/refs/heads/t_1140存在,这个错误是如何发生的。 你有可能弄错了吗?

更正:查尔斯·贝利(Charles Bailey)在下面指出,裁判可能被打包,在这种情况下, .git/refs/heads没有相应的文件

我试图克隆一些github库时遇到了这个问题,我所在的系统运行的是旧版本的git v1.7.4 ,一个快速更新修复了它。

 remote: Counting objects: 533, done. remote: Compressing objects: 100% (248/248), done. remote: Total 533 (delta 232), reused 529 (delta 230) Receiving objects: 100% (533/533), 121.36 KiB, done. Resolving deltas: 100% (232/232), done. error: refs/remotes/origin/master does not point to a valid object! verror: Trying to write ref refs/heads/master with nonexistant object 0457f3e2e9432e07a1005f0f4161dc4b8215f128 fatal: Cannot update the ref 'HEAD'. 

如果这是失败的:

错误:未能运行重新包装

查看.git/packed-refs列出的分支(es)并删除这些行。 我尝试了所有其他的解决scheme,但是这终于为我解决了。

无论谁使用Visual Studio,我都会给我两分钱。 我试图删除一个本地分支,并通过命令行运行以下命令解决了这个问题:

 git branch -D <branchName> 

通过您的分支.git目录进行文本search使用“grep”或“findstr”之类的东西 – 并删除所有实例。