Git dit que la référence distante n'existe pas lorsque je supprime la branche distante

130

L'Iran git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Je souhaite supprimer ma branche distante

J'ai essayé

git push origin --delete remotes/origin/test

j'ai eu

erreur: impossible de supprimer 'télécommandes / origine / test': la référence distante n'existe pas

Comment n'existe-t-il pas?

J'ai fait un git branch -a, et je l'ai vu répertorié.

Ai-je manqué quelque chose ?

cyber8200
la source
1
git branch -alistera les succursales de votre local et non de votre télécommande. Droite?
Je pense à tous. Je ne suis pas sûr.
cyber8200
2
Il affichera les succursales distantes de votre section locale. Il ne listera pas toutes les branches distantes.
1
@peterh Il me semble que cela demande vraiment "pourquoi ne puis-je pas supprimer une branche distante" (probablement lorsque la branche a été supprimée de la télécommande mais que la référence distante est toujours présente localement) et donc, pas un duplicata mais pourrait faire avec un titre plus clair
Andrew Spencer
1
J'ai fait une modification du titre, j'espère que c'est plus proche de l'intention de la question
Andrew Spencer

Réponses:

259

La commande git branch -aaffiche les branches distantes qui existent dans votre référentiel local . Cela peut sembler un peu déroutant, mais pour le comprendre, vous devez comprendre qu'il existe une différence entre une branche distante et une branche qui existe dans un référentiel distant. Les branches distantes sont des branches locales qui mappent vers les branches du référentiel distant. Ainsi, l'ensemble des branches distantes représente l'état du référentiel distant.

La manière habituelle de mettre à jour la liste des branches distantes est d'utiliser git fetch. Cela obtient automatiquement une liste mise à jour des branches de la télécommande et configure les branches distantes dans le référentiel local, en récupérant également tous les objets de validation que vous pourriez manquer.

Cependant, par défaut, git fetchne supprime pas les branches distantes qui n'ont plus de branche homologue sur la télécommande. Pour ce faire, vous devez explicitement élaguer la liste des branches distantes:

git fetch --prune

Cela supprimera automatiquement les branches distantes qui n'existent plus sur la télécommande. Ensuite, git branch -rvous montrera une liste mise à jour des branches qui existent vraiment sur la télécommande: Et celles que vous pouvez supprimer en utilisant git push.

Cela étant dit, pour l'utiliser git push --delete, vous devez spécifier le nom de la branche sur le référentiel distant; pas le nom de votre succursale distante. Donc, pour supprimer la branche test(représentée par votre branche distante origin/test), vous utiliseriez git push origin --delete test.

poussée
la source
Aidera également git branch -r | grep "origin"avec les grands projets qui utilisent fork
Seraf
Il y a donc 2 raisons pour obtenir ce message de git: soit la branche a déjà été supprimée sur le serveur, soit vous avez mal préfixé le nom de la branche avec remotes/origin/. Ou les deux.
Andrew Spencer
137

La signification de remotes/origin/testest que vous avez une branche appelée testdans le serveur distant origin. Donc la commande serait

git push origin --delete test
drosam
la source
25

Il existe un raccourci pour supprimer la branche à l'origine:

git push origin :<branch_name>

Ce qui revient à faire git push origin --delete <branch_name>

Ricardo Magalhães
la source
13
  1. obtenir la liste des succursales distantes
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. vous devriez obtenir une liste des branches distantes:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. maintenant, nous pouvons supprimer la branche:
git push origin --delete deleteme
MovGP0
la source
11

git push origin --delete yourBranch

Matheus Marsiglio
la source
4

Étant donné que la branche distante est remote / origin / test, vous pouvez utiliser deux méthodes:

git push origin --delete test

et

git branch -D -r origin/test
Symeon Mattes
la source
3

J'ai suivi la solution par poke avec un ajustement mineur à la fin. Mes pas suivent
- git fetch --prune;
- git branch -aimpression de ce qui suit
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(branche distante à supprimer)
- git push origin --delete branch.
Ici, la branche à supprimer n'est pas nommée remotes/origin/branchmais simplement branch. Et la branche est supprimée.

Yanqi Huang
la source
+1 pour le commentaire re: le nom de la branche, j'essayais de supprimer origin/branchquand il devrait juste être branch.
ken
1

git branch -a listera les succursales de votre section locale et non les succursales de votre télécommande.

Et l'erreur error: unable to delete 'remotes/origin/test': remote ref does not existsignifie que vous n'avez pas de branche portant ce nom dans votre télécommande, mais la branche existe dans votre local.


la source
cela est utile. cela a résolu mon problème de suppression. Je me demande pourquoi 'git push --delete origin / test' n'a pas fonctionné, alors que "git push --delete test" a fonctionné
user10293779
1

Un one-liner pratique pour supprimer les branches autres que `` master '' de l'origine:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Assurez-vous de bien comprendre les implications de cette exécution avant de le faire!

Eddiewould
la source
merci pour ce code! c'est le seul code git que j'ai testé en supprimant toutes les branches distantes sauf master.
Alvin
1

Pour moi, cela a fonctionné $ ▶ git branch -D -r origin / mybranch

Détails

$ ▶ git branch -a | grep mybranch télécommandes / origin / mybranch

$ ▶ git branche -r | grep mybranch origine / mybranch

$ ▶ git branch develop * fonctionnalité / pré-déploiement

$ ▶ git push origin --delete mybranch error: impossible de supprimer 'mybranch': remote ref does not exist error: failed to push some refs to '[email protected]: config / myrepo.git'

$ ▶ git branch -D -r origin / mybranch Origine / mybranch de la branche distante supprimée (était 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branche -r | grep mybranch

Buggy B
la source
-1
git push origin --delete origin/test 

devrait fonctionner aussi bien

Sajal Choukse
la source
2
Il devrait être git push origin --delete test
Andreas Presthammer