115 votes

warning : remote HEAD se réfère à une référence inexistante, impossible d'effectuer le checkout

Cette erreur semble très répandue pour différentes raisons.

J'ai un simple repo git nu appelé "kiflea.git", je le clone comme ceci :

git clone git://kipdola.be/kiflea.git

Puis git me dit : warning: remote HEAD refers to nonexistent ref, unable to checkout.

Et oui, il n'y a pas de fichiers versionnés dans la carte, à l'exception du répertoire .git. Bref, la seule chose que j'ai besoin de faire est :

cd kiflea
git checkout master

Et ça marche, tous les fichiers sont là. Mais je pensais que le clonage d'un repo vérifiait automatiquement le master, alors que se passe-t-il exactement, et comment puis-je le réparer ?

J'ai remarqué que, après avoir fait le git checkout master ce qui est ajouté à mon fichier de configuration .git local :

[branch "master"]
    remote = origin
    merge = refs/heads/master

Il est probablement intéressant de savoir que ce dépôt git était un dépôt svn dans un passé lointain.

Ps : lorsque l'on parcourt le dépôt nu à l'aide de gitweb, il y a clairement une master succursale là-bas : http://kipdola.be/gitweb/?p=kiflea.git;a=sommaire

2 votes

Qu'est-ce que git ls-remote origin vous montrer ?

0 votes

C'est la même chose avant ou après le checkout master bit : 25f600739343a7ce32d6311a1e6140870774810b refs/heads/master

1 votes

Il semble que le référentiel distant ait perdu (ou n'ait jamais eu) son HEAD . Avez-vous un accès direct à celui-ci ? Si oui, voir aquí

3voto

Ng Sek Long Points 581

Pour Gitlab, même s'il indique que vous êtes sur une branche par défaut (par ex. master ), il se peut que vous n'y soyez pas, le fait de le régler à nouveau permet d'y remédier, de la manière suivante :

  1. Créer une nouvelle branche, peut-être asd
  2. paramètres > référentiel > Branche par défaut, qui montre que la branche par défaut est master
  3. Réglez-le sur asd
  4. Remettez-le à master
  5. Supprimer asd branche

C'est fait, votre branche par défaut est maintenant master

1 votes

C'est la solution la plus rapide. Nous en avons aussi beaucoup et cette solution fonctionne parfaitement

2voto

Corrado Points 21

J'ai eu le même problème lors de la création d'un repo nu.

J'ai résolu le problème en clonant le repo, en créant une branche master locale et en poussant le master vers le repo distant.

1) cloner le repo

$ git.exe clone --progress -v "the remote path" "my local path"

2) créer une branche principale localement.

   $ git checkout -b master

3) faire un commit dans la branche locale

$ git add readme.md 
$ git commit –m “Added readme”

4) Pousser le master local sur le distant

   $ git push origin master

2voto

Hitesh Sahu Points 12561

Cette question date d'il y a 10 ans. Voici comment je l'ai résolue aujourd'hui :

Supposons que vous cloniez votre répertoire à l'aide de la commande clone, vous verrez des logs comme celui-ci :

clone git https://abcgit-repo.abccoolrepo

Clonage en 'abcgit404.sasasasmy cool repo'... distant : Comptage des objets : 198, terminé remote : Recherche de sources : 100% (26/26) Réception d'objets : 80% (176/219)ed 208 (delta 0)Réception d'objets : 80% (176/219)ed 208 (delta 0)Réception d'objets : 80% (176/219) objets Réception d'objets : 100% (219/219), 49.09 KiB | 163.00 KiB/s, done. warning : remote HEAD refers to nonexistent ref, unable to checkout.

Il s'agit maintenant de résoudre remote HEAD se réfère à une référence inexistante, incapable de

Vérifiez d'abord votre branche et vous verrez des logs comme celui-ci :

  1. git checkout remotes/origin/mainline

HEAD est maintenant à xyz

  1. Voir toutes les branches pour lesquelles votre branche actuelle aura un * devant elle

git branch -a

*(HEAD détaché à origin/mainline)
remotes/origin/a
remotes/origin/b
remotes/origin/c
remotes/origin/d
remotes/origin/mainline

  1. Copiez le nom de la branche ci-dessus et exécutez git checkout checkout -b

Eg checking out mainline :

git checkout -b remotes/origin/mainline

*origine/mainline remotes/origin/a
remotes/origin/b
remotes/origin/c
remotes/origin/d
remotes/origin/mainline

Cela résoudra le problème

1voto

Jason Axelson Points 587

Il y a certainement un problème avec votre référentiel distant. Vous pouvez peut-être y remédier en créant un nouveau clone du dépôt. Pousser un nouveau commit sur la branche master peut également fonctionner.

0 votes

Je suppose que vous vouliez dire : "git push -u origin HEAD:HEAD" Cela n'a rien résolu pour moi...

1voto

Philip Oakley Points 3825

Je suppose qu'il s'agit de la tête de liste. * dans le journal de livraison qui trompe le serveur distant.

Je peux naviguer dans l'interface web du repo en utilisant certains des liens du menu, mais d'autres échouent avec une erreur de type 404 - Unknown commit object ou similaire, en particulier à partir de la page de résumé.

Voyez si vous pouvez modifier le dernier message de validation et forcez la mise à jour pour voir si cela résout le problème. Il se peut qu'il y ait un bug dans le démon du serveur. Si c'est le cas, cela vaut la peine de le signaler sur la liste git git@vger.kernel.org (messages en texte clair uniquement).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X