Comment supprimer une référence de twig distante non valide de Git?

Dans mon repository actuel, j’ai la sortie suivante:

$ git branch -a * master remotes/origin/master remotes/public/master 

Je veux supprimer les remotes/public/master de la liste des twigs:

 $ git branch -d remotes/public/master error: branch 'remotes/public/master' not found. 

En outre, la sortie de git remote est étrange, car elle ne répertorie pas public :

 $ git remote show origin 

Comment puis-je supprimer ‘télécommandes / public / master’ de la liste des twigs?

Mettre à jour, essayé la commande git push :

 $ git push public :master fatal: 'public' does not appear to be a git repository fatal: The remote end hung up unexpectedly 

Vous pourriez avoir besoin d’un nettoyage

 git gc --prune=now 

ou vous pourriez avoir besoin d’un pruneau

 git remote prune public 

prune

Supprime toutes les twigs de suivi obsolètes sous . Ces twigs obsolètes ont déjà été supprimées du référentiel distant référencé par , mais sont toujours disponibles localement dans “remotes / “.

Avec l’option –dry-run, indiquez quelles twigs seront élaguées, mais ne les élagerez pas.

Cependant, il semble que ceux-ci auraient dû être nettoyés plus tôt avec

 git remote rm public 

rm

Supprimez la télécommande nommée . Toutes les twigs de suivi à distance et les parameters de configuration de la télécommande sont supprimés.

Il se peut donc que vous ayez modifié votre fichier de configuration à la main et que cela ne se soit pas produit, ou que vous ayez des problèmes de privilège.

Peut-être recommencer et voir ce qui se passe.

Contexte de conseil

Si vous regardez dans les journaux de révision , vous remarquerez que j’ai suggéré des techniques plus “correctes”, qui pour quelque raison que ce soit ne voulaient pas travailler sur leur repository.

Je pensais que l’OP avait fait quelque chose qui laissait son arbre dans un état incohérent qui le faisait se comporter un peu étrangement, et git gc était obligé de réparer les laissés pour compte.

Habituellement, git branch -rd origin/badbranch est suffisant pour brouiller une twig de suivi locale, ou une git push origin :badbranch pour la connexion d’une twig distante, et vous n’aurez généralement jamais besoin d’appeler git gc

Tout ce que vous devez faire est

 git fetch -p 

Il va supprimer toutes vos twigs locales qui sont supprimées à distance.

Si vous êtes sur git 1.8.5+, vous pouvez le définir automatiquement

 git config fetch.prune true 

ou

 git config --global fetch.prune true 
 git push public :master 

Cela supprimerait la twig distante nommée master comme l’a fait remarquer Kent Fredric.

Pour répertorier les twigs de suivi à distance:

 git branch -r 

Pour supprimer une twig de suivi à distance:

 git branch -rd public/master 

Tout ce que vous devez faire est

 $ git branch -rd origin/whatever 

C’est si simple. Il n’y a aucune raison d’appeler un gc ici.

git gc --prune=now n’est pas ce que vous voulez

 git remote prune public 

ou git remote prune origin # si c’est la source distante

est ce que tu veux

La réponse acceptée n’a pas fonctionné pour moi lorsque la référence a été emballée. Cela fait cependant:

 $ git remote add public http://anything.com/bogus.git $ git remote rm public 

Dans mon cas, j’essayais de supprimer les entrées enregistrées dans .git/packed-refs . Vous pouvez éditer ce fichier en texte brut et en supprimer les entrées que git br -D ne sait pas toucher (au moins dans la version 1.7.9.5).

J’ai trouvé cette solution ici: https://stackoverflow.com/a/11050880/1695680

 git push origin --delete  

Référencé à partir de: http://www.gitguys.com/topics/adding-and-removing-remote-twigs/

J’avais un problème similaire. Aucune des réponses n’a aidé. Dans mon cas, deux repositorys distants supprimés apparaissaient en permanence.

Ma dernière idée était de supprimer toutes les références à la main.

Disons que le référentiel s’appelle «Repo». J’ai fait:

 find .git -name Repo 

et supprimé les fichiers et répertoires correspondants

 grep Repo -r .git 

Cela a trouvé des fichiers texte dans lesquels j’ai supprimé les lignes correspondantes. Maintenant, tout semble aller bien.

Habituellement, vous devriez laisser ce travail à git.

Je ne connaissais pas git branch -rd , alors j’ai résolu des problèmes comme celui-ci en git branch -rd mon repo comme un repo distant et en effectuant une suppression à distance. git push . :refs/remotes/public/master git push . :refs/remotes/public/master . Si les autres méthodes ne fonctionnent pas et que vous avez une référence bizarre dont vous souhaitez vous débarrasser, cette manière brute est infaillible. Il vous donne la précision exacte pour supprimer (ou créer!) Tout type de référence.

Seulement légèrement lié, mais pourrait encore être utile dans la même situation que nous avions – nous utilisons un partage de fichiers réseau pour notre référentiel distant. La semaine dernière, les choses fonctionnaient, nous recevions cette semaine l’erreur “L’origine distante n’annonçait pas la référence pour les refs / chefs / master de twig. Cette référence peut ne pas exister dans la télécommande ou peut être masquée par les parameters d’autorisation”

Mais nous pensions que rien n’avait été fait pour corrompre les choses. Le NFS fait des instantanés, j’ai donc examiné chaque “version précédente” et constaté qu’il y a trois jours, la taille en Mo du référentiel était passée de 282 Mo à 33 Mo, et environ 1 403 nouveaux fichiers et 300 dossiers existaient désormais. J’ai interrogé mes collègues et l’un d’entre eux avait essayé de faire un effort ce jour-là – puis l’a annulé.

J’ai utilisé la fonctionnalité “Restaurer” pour la restaurer juste avant cette date et maintenant tout fonctionne à nouveau correctement. J’ai essayé le pruneau précédemment, ne semble pas avoir aidé. Peut-être que le nettoyage plus dur aurait fonctionné.

J’espère que cela pourrait aider quelqu’un d’autre un jour!

Geai