web-dev-qa-db-fra.com

Se débarrasser de '... ne pointe pas vers un objet valide' pour une ancienne branche de git

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.

40

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.

21
Adam Dymitruk

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
15
TdV

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

14
Dan Berindei

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

3
Mark Longair

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

Effectuez une recherche text dans votre répertoire .git pour votre branche

Utilisez quelque chose comme grep ou findstr et supprimez toutes les instances.

1
Cordell

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.

1
Tarka

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>
0
Mari Faleiros

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.

0
Frank Forte

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

0
Eddy