web-dev-qa-db-fra.com

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

Dans mon rapport actuel, j'ai la sortie suivante:

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

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

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

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

$ git remote show 
Origin

Comment puis-je supprimer 'remotes/public/master' de la liste des branches?

Mise à jour, tentative de 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
711
cmcginty

Vous pourriez avoir besoin d'un nettoyage

git gc --Prune=now

ou vous pourriez avoir besoin d'un pruneau

git remote Prune public

Taillez

Supprime toutes les branches de suivi obsolètes sous <nom>. Ces branches obsolètes ont déjà été supprimées du référentiel distant référencé par <nom>, mais sont toujours disponibles localement dans "télécommandes/<nom>".

Avec l'option --dry-run, indique quelles branches seront élaguées, mais ne les élaguez pas réellement.

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 <nom>. Toutes les branches de suivi à distance et les paramètres de configuration de la télécommande sont supprimés.

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

Peut-être que ça recommence pour voir ce qui se passe.

Contexte du conseil

Si vous consultez les journaux de révision , vous remarquerez que j'ai suggéré d'autres techniques "correctes", qui, pour une raison quelconque, ne souhaitaient pas fonctionner sur leur référentiel.

Je soupçonnais que l'OP avait fait quelque chose qui laissait son arbre dans un état incohérent qui le rendait un peu étrange, et il était nécessaire de git gc pour réparer la gauche.

Habituellement git branch -rd Origin/badbranch suffit pour numériser une branche de suivi locale, ou git Push Origin :badbranch pour numériser une branche distante, et généralement vous jamais devez appeler git gc

715
Kent Fredric

Tout ce que vous devez faire c'est

git fetch -p

Cela supprimera toutes vos branches locales qui sont supprimées à distance.

Si vous êtes sur git 1.8.5+, vous pouvez le configurer automatiquement

git config fetch.Prune true

ou

git config --global fetch.Prune true
664
Pawan Maheshwari
git Push public :master

Ceci effacerait la branche distante nommée master comme Kent Fredric l’a fait remarquer.

Pour répertorier les branches de suivi à distance:

git branch -r

Pour supprimer une branche de suivi à distance:

git branch -rd public/master
315
Alan Haggai Alavi

Tout ce que vous devez faire c'est

$ git branch -rd Origin/whatever 

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

157
jpswain

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

c'est ce que tu veux

70
tongueroo

La réponse acceptée ne fonctionnait pas pour moi lorsque l'arbitre était plein à craquer. Ceci fait cependant:

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

Dans mon cas, j'essayais de supprimer les entrées sauvegardé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/169568

7
ThorSummoner
git Push Origin --delete <branch name>

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

4
kip2

J'avais un problème similaire. Aucune des réponses n'a aidé. Dans mon cas, deux référentiels distants supprimés sont affichés 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 pour le mieux.

Habituellement, vous devriez quitter ce travail pour git.

2
Keinstein

Seulement un peu lié, mais pourrait toujours ê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 bien. Cette semaine, nous obtenions le message d'erreur "Remote Origin n'a pas annoncé de référence pour les références/têtes/maîtres de branche. Cette référence peut ne pas exister dans la télécommande ou être masquée par les paramètres d'autorisation".

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

J'ai utilisé la fonctionnalité "Restauration" de NFS pour le restaurer juste avant cette date et maintenant tout fonctionne à nouveau correctement. J'ai essayé le pruneau précédemment, ne semblait pas aider. Peut-être que les nettoyages plus difficiles auraient fonctionné.

J'espère que cela pourra aider quelqu'un d'autre un jour!

Geai

2
JGlass

Comme je ne connaissais pas git branch -rd, la façon dont j'ai résolu ce problème est de traiter mon référentiel comme un référentiel distant et de le supprimer à distance. git Push . :refs/remotes/public/master. Si les autres méthodes ne fonctionnent pas et que vous souhaitez vous débarrasser de certaines références étranges, cette méthode brute est sans appel. Il vous donne la précision exacte pour supprimer (ou créer!) Tout type de référence.

2
clacke