对于旧的 git 分支,去掉“ ... 并不指向有效的对象”

我有一个分叉的 Git 回购和我的克隆似乎有一个旧的,不再存在的问题,分支。我一直看到这条信息:

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

我没有其他信息了,回收信息也没问题。没有任何操作可以阻止我在其他分支上工作,推动变更,拉动... 等等。

我看过了,关于如何解决这个问题,没有明确的指示。我尝试执行 git fsck --full,但是没有看到任何错误。只是 dangling ...信息的负载。

I've also checked my .git/config and there's no references to this branch and have also checked .git/refs/heads and there's no reference to t_1140

有什么办法可以消除这个错误吗?

我试图克隆我的回购再次和它似乎错误是我的 Github 回购。所以,我现在唯一能想到的就是再次抛弃我的回收和叉子。

78091 次浏览

Check .git/refs/remotes/origin. They are there and the upstream no longer has them. To clean out the remotes that no longer exist run

git remote prune origin

您还可以通过在实际执行之前添加 --dry-run来了解它的作用。

你说你有:

还检查了. git/refs/head,没有对 t _ 1140的引用

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

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

您的本地克隆可能没有问题,问题是 GitHub 存储库中缺少 t_1140分支对象。

我也有这个问题,GitHub 的支持修复了它,我认为通过删除 refs/heads/t_1140在他们的一端。

更新: 我在另一个分支上又得到了这个错误,我可以通过运行这个命令来修复它:

git push origin :refs/heads/t_ispn982_master

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

remote: warning: Allowing deletion of corrupt ref.

但损坏的分支将被删除

I had this issue when attempting to clone some github repositories, the system I was on was running an older version of git v1.7.4, a quick update fixed it up.

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 远程修剪起源对我来说不起作用。

[ Update. AFAIU, I'm running into this problem because of using git alternate. Say I've got repo A, registered as alternate for repo B. When I create a new branch br in repo A, and fetch repo A as remote in repo B, git will create a remote ref .git/refs/remotes/A/br for the new branch. When I delete the branch in repo A, and after the corresponding object is garbage-collected, I get the 'error: refs/remotes/A/br does not point to a valid object!' ]

我已经写了这个脚本(更新以处理打包的参考文献) ,以删除悬空的参考文献(使用 验证提交是否存在中的信息)。

#!/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

I'm giving my two cents for whoever is using Visual Studio. 我在尝试删除一个本地分支时遇到了这个问题,通过命令行运行以下命令解决了这个问题:

git branch -D <branchName>

如果在这方面失败了:

错误: 重新打包失败

.git/packed-refs中查找列出的分支并删除这些行。我尝试了所有其他的解决方案,但这个最终解决了我的问题。

Do a 通过你的. git 目录进行文本搜索 for your branch

Use something like grep or findstr and remove all instances.

这个为我解决了问题:

git push origin :refs/remotes/origin/[branch name]
git push origin :refs/heads/origin/[branch name]

警告: 这将从服务器中删除该分支-该分支上的任何未合并到另一个分支的更改都将丢失。

I had this problem and none of the remedies suggested above worked. 因此,我编辑了. git/pack-refs,并删除了提到不存在分支的那一行。 突然间一切都好了。

Gotta love those human-readable file formats ...

这将清除所有丢失的裁判:

git for-each-ref --format="%(refname)" | while read ref; do
git show-ref --quiet --verify $ref 2>/dev/null || git update-ref -d $ref
done

在尝试了各种解决方案后,我终于用以下命令提示符清理了参考文献:

for /f %i in ('git for-each-ref --format="%(refname)"') do git show-ref --quiet --verify %i || git update-ref -d %i
error: refs/heads/t_1140 does not point to a valid object!

假设你试过用这个修剪:

git remote prune origin

你仍然是 < strong > CA Nn’t GET IT TO WORK ,作为最后的手段,尝试删除 t_1140

Basically,

1. cd refs/heads

2. rm -r t_1140

在重写历史记录并同时删除许多分支后出现此问题。

rm -rf .git/refs/remotes/origin/
git fetch

通过删除所有远程引用并再次获取它们来解决这个问题。

除了其他人提到的,如果当前使用的 git 镜像存在一些问题,可能会出现这个问题,请尝试使用其他可用的镜像映像。

  1. 获取工作镜链接
  2. 删除现有的有问题的

Git Remote-V

移除远程起源

  1. 正在更新。
git remote add origin <New mirror URL>