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.
Ü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.
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
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
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
.
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'.
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.
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.
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>
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.
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 ...