为旧的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”之类的东西 – 并删除所有实例。