wake-up-neo.net

Das Entfernen von '... zeigt nicht auf ein gültiges Objekt' für einen alten Git-Zweig

Ich habe eine Gabel eines Git-Repos und mein Klon scheint ein Problem mit einem alten, nicht mehr existierenden Zweig zu haben. Ich sehe ständig diese Nachricht:

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

Ich habe keine anderen Nachrichten und das Repo funktioniert gut. Es gibt keine Operation, die mich davon abhält, an anderen Zweigen zu arbeiten, Änderungen vorzunehmen, zu ziehen ... usw.

Ich habe mich umgesehen und es gibt weniger als klare Anweisungen, wie man dieses Problem umgehen kann. Ich habe versucht, git fsck --full auszuführen, sehe aber keine Fehler. Nur eine Last auf dangling ...-Nachrichten.

Ich habe auch meinen .git/config überprüft und es gibt keine Referenzen auf diesen Zweig. Ich habe auch .git/refs/heads geprüft und es gibt keinen Bezug auf t_1140.

Irgendeine Idee, wie man diesen Fehler beseitigt?

ich habe versucht, mein Repo erneut zu klonen, und es scheint, als wäre der Fehler auch mein Github-Repo. Das einzige, woran ich jetzt gerade denken kann, ist mein Repo und die Gabel wieder aufzuheben.

40

Überprüfen Sie .git/refs/remotes/Origin. Sie sind da und der Upstream hat sie nicht mehr. Um die nicht mehr vorhandenen Fernbedienungen zu bereinigen, führen Sie den Befehl aus

git remote Prune Origin

Sie könnten auch sehen, was es tun würde, indem Sie --dry-run hinzufügen, bevor Sie es tatsächlich tun.

25
Adam Dymitruk

Ich stoße regelmäßig auf diesen Fehler. Git Remote Prune Origin funktioniert nicht für mich.

[Update] AFAIU, ich stoße auf dieses Problem, weil git alternate verwendet wird. Angenommen, ich habe Repo A, als Alternative für Repo B registriert. Wenn ich einen neuen Zweig br in Repo A erstellt und Repo A als Remote in Repo B abruft, erstellt git eine Fernreferenz .git/refs/remotes/A/br für die neue Branche. Wenn ich den Zweig in Repo A lösche und das entsprechende Objekt nicht mehr vorhanden ist, erhalte ich den Fehler: refs/remotes/A/br zeigt nicht auf ein gültiges Objekt! ]

Ich habe dieses Skript (aktualisiert, um mit gepackten Refs umgehen zu können) geschrieben, um die hängenden Refs zu entfernen (unter Verwendung der Informationen in Validate, wenn Festschreiben existiert ).

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

Ihr lokaler Klon ist wahrscheinlich in Ordnung, das Problem ist, dass die t_1140-Zweigobjekte in Ihrem GitHub-Repository fehlen.

Ich hatte auch dieses Problem und die GitHub-Unterstützung hat dieses Problem behoben. Ich denke, ich lösche refs/heads/t_1140 an ihrem Ende.

Update: Ich habe den Fehler erneut bei einem anderen Zweig erhalten und konnte ihn mit dem folgenden Befehl beheben:

git Push Origin :refs/heads/t_ispn982_master

Sie sollten eine Warnmeldung wie diese erhalten:

remote: warning: Allowing deletion of corrupt ref.

der beschädigte Zweig wird jedoch gelöscht

14
Dan Berindei

Sie sagen, Sie haben:

hat auch .git/refs/heads überprüft und es gibt keine Referenz auf t_1140

... was sehr überraschend ist. Ich kann nur sehen, wie dieser Fehler auftreten würde, wenn die Datei .git/refs/heads/t_1140 vorhanden ist. Ist es möglich, dass Sie sich darüber geirrt haben?

Korrektur: Charles Bailey weist darauf hin, dass die Refs möglicherweise gepackt werden. In diesem Fall gibt es keine entsprechende Datei in .git/refs/heads.

3
Mark Longair

Ich hatte dieses Problem, als ich versuchte, einige github-Repositorys zu klonen. Das System, auf dem ich mich befand, führte eine ältere Version von git v1.7.4 aus.

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'.
1
codemonkee

Führen Sie eine Textsuche in Ihrem .git-Verzeichnis durch für Ihren Zweig

Verwenden Sie etwas wie grep oder findstr und entfernen Sie alle Instanzen.

1
Cordell

Wenn dies fehlschlägt:

fehler: Repack konnte nicht ausgeführt werden

Suchen Sie in .git/packed-refs nach dem aufgelisteten Zweig und entfernen Sie diese Zeilen. Ich habe alle anderen Lösungen ausprobiert, aber das hat es endlich für mich gelöst.

1
Tarka

Ich gebe meine zwei Cents für jeden, der Visual Studio verwendet .. Ich hatte dieses Problem, als ich versuchte, einen lokalen Zweig zu löschen und den folgenden Befehl über die Befehlszeile auszuführen.

git branch -D <branchName>
0
Mari Faleiros

Das hat es für mich behoben:

git Push Origin :refs/remotes/Origin/[branch name]
git Push Origin :refs/heads/Origin/[branch name]

WARNUNG: Dadurch wird der Zweig vom Server gelöscht. Alle Änderungen in diesem Zweig, die nicht mit einem anderen Zweig zusammengeführt wurden, gehen verloren.

0
Frank Forte

Ich hatte dieses Problem und keine der oben vorgeschlagenen Abhilfemaßnahmen funktionierte. So bearbeitete ich .git/pack-refs und entfernte die Zeile, die den nicht vorhandenen Zweig erwähnte.

Ich muss diese menschenlesbaren Dateiformate lieben ...

0
Eddy