J'ai un fork d'un dépôt Git et mon clone semble avoir un problème avec une ancienne branche qui n'existe plus. Je continue à voir ce message:
error: refs/heads/t_1140 does not point to a valid object!
Je n'ai pas d'autres messages et le repo fonctionne bien. Aucune opération ne m'empêche de travailler sur d'autres branches, de pousser des changements, de tirer, etc.
J'ai regardé autour de moi et il y a peu d'instructions claires sur la façon de contourner ce problème. J'ai essayé d'exécuter git fsck --full
mais je ne vois aucune erreur. Juste une charge sur les messages dangling ...
.
J'ai également vérifié mon .git/config
et il n'y a aucune référence à cette branche et j'ai également vérifié .git/refs/heads
et il n'y a aucune référence à t_1140
Une idée de comment se débarrasser de cette erreur?
p.j'ai de nouveau essayé de cloner mon référentiel et il semble que l'erreur concerne également mon référentiel Github. Donc, la seule chose à laquelle je peux penser maintenant, c’est d’abandonner à nouveau mon dépôt de garantie.
Vérifiez .git/refs/remotes/Origin
. Ils sont là et l’amont ne les a plus. Pour nettoyer les télécommandes qui n'existent plus, lancez
git remote Prune Origin
Vous pourriez aussi voir ce que cela donnerait en ajoutant --dry-run
avant de le faire.
J'espère que cela t'aides.
Je rencontre régulièrement cette erreur. git remote Prune Origin ne fonctionne pas pour moi.
[ Mettre à jour. AFAIU, je rencontre ce problème à cause de l'utilisation de git alternative. Supposons que j'ai le référentiel A, enregistré en tant que remplaçant pour le référentiel B. Lorsque je crée une nouvelle branche br dans le référentiel A et que je récupère le référentiel A comme distant dans le référentiel B, git crée une référence distante .git/refs/remotes/A/br pour la nouvelle branche. Lorsque je supprime la branche dans le référentiel A et que l'objet correspondant est récupéré, le message "erreur: refs/remotes/A/br ne pointe pas vers un objet valide!". ]
J'ai écrit ce script (mis à jour pour traiter les références emballées) pour supprimer les références en suspens (en utilisant les informations dans Valider si la validation existe ).
#!/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
Votre clone local est probablement bon, le problème est que les objets de branche t_1140
sont absents de votre référentiel GitHub.
J'ai eu ce problème aussi et le support de GitHub l'a corrigé, je pense en supprimant refs/heads/t_1140
de leur côté.
Mise à jour: J'ai de nouveau l'erreur avec une autre branche et j'ai pu la réparer en exécutant la commande suivante:
git Push Origin :refs/heads/t_ispn982_master
Vous devriez recevoir un message d'avertissement comme ceci:
remote: warning: Allowing deletion of corrupt ref.
mais la branche corrompue sera supprimée
Vous dites que vous avez:
également vérifié .git/refs/heads et il n'y a aucune référence à t_1140
... ce qui est très surprenant. Je peux seulement voir comment cette erreur se produirait si le fichier .git/refs/heads/t_1140
existe. Est-il possible que vous vous trompiez?
Correction: Charles Bailey indique ci-dessous que les références peuvent être compressées, auquel cas il n'y a pas de fichier correspondant dans .git/refs/heads
Je rencontrais ce problème lorsque je tentais de cloner des référentiels github. Le système sous lequel j'étais fonctionnait sous une version plus ancienne de git v1.7.4
, une mise à jour rapide l'a corrigé.
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'.
Effectuez une recherche text dans votre répertoire .git pour votre branche
Utilisez quelque chose comme grep
ou findstr
et supprimez toutes les instances.
Si cela échoue avec ceci:
erreur: échec de l'exécution du remballage
Recherchez dans .git/packed-refs
les branches répertoriées et supprimez ces lignes. J'ai essayé toutes les autres solutions, mais cela a finalement résolu le problème pour moi.
Je donne mes deux cents pour quiconque utilise Visual Studio . J'ai eu ce problème en essayant de supprimer une branche locale et en exécutant la commande suivante via la ligne de commande résolu
git branch -D <branchName>
Cela a résolu le problème pour moi:
git Push Origin :refs/remotes/Origin/[branch name]
git Push Origin :refs/heads/Origin/[branch name]
ATTENTION: ceci supprime la branche du serveur - toute modification de cette branche qui n'a pas été fusionnée avec une autre branche sera perdue.
J'ai eu ce problème et aucun des remèdes suggérés ci-dessus n'a fonctionné . J'ai donc édité .git/packing-refs et supprimé la ligne qui mentionnait la branche inexistante . Tout allait soudainement bien.
Il faut aimer ces formats de fichiers lisibles par l'homme ...