Lors de la suppression de la branche git distante "erreur: impossible de pousser vers une destination non qualifiée"


139

J'essaye de supprimer une branche git distante avec

git push origin :my_remote_branch

et obtenir:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

ce sont mes branches actuelles

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

Toute idée sur la façon dont je peux me débarrasser de cette branche serait appréciée.


Avez-vous essayé un git fetchpour voir s'il corrigeait ce nom distant inexistant? Avez-vous essayé d'aller dans votre .git\refs\remotes\originet de supprimer le my_remote_branchfichier, pour voir si cela suffit?
VonC

fait git fetchmais cela n'a pas aidé. Essaiera de rechercher une solution plus simple avant d'essayer de supprimer le fichier manuellement.
Hugo

essayez de supprimer ou du moins de déplacer ce fichier: il ne contient que le SHA1 de la pointe de cette branche.
VonC

45
Vous devez faire git fetch -ppour vous débarrasser des branches de suivi obsolètes.
Jan Hudec

Réponses:


270

Le fait qu'il refs/remotes/origin/my_remote_branchexiste dans votre référentiel local n'implique pas qu'il refs/heads/my_remote_branchexiste dans le originréférentiel distant.

Faites git fetch -p originfaire refs/remotes/origin/my_remote_branchdisparaître si elle est déjà supprimé origine. L' -poption indique à fetch de supprimer toutes les branches de suivi qui n'existent plus dans les télécommandes correspondantes; par défaut, ils sont conservés.


12
git fetch -p originréparé pour moi. Merci beaucoup.
redimp

1
Votre réponse est géniale. Bref et sur l'essence!
1nstinct

la taille n'a pas aidé! tandis que git push origin --delete origin/feature/xm'a donné une erreur sur la non-existence ref git push origin :feature/xa supprimé la branche. Donc je suppose que je git push origin --delete <branchName>ne devrais pas inclure l'origine dans le nom de la branche (?) Mais c'est bash-completed, ce qui est déroutant.
dashesy

@dashesy, vous étiez dans une situation différente de celle du demandeur d'origine. Dans la question d'origine, le problème est que la branche distante a déjà été supprimée , vraisemblablement par quelqu'un d'autre, de sorte que seul le local a dû être synchronisé. Pendant que vous supprimez la télécommande. En effet, la commande devrait être git push origin --delete feature/x, car vous donnez le nom de la branche à l'origine , et elle n'a pas ce préfixe là-bas (les deux formes sont par ailleurs synonymes de toute façon).
Jan Hudec

@JanHudec a du sens. Bash complete est intelligent lors de l'utilisation :de ne pas inclure, originmais il se termine comme origin/branch_nameau lieu de simplement branch_namelors de l'utilisation de la --deletevariante.
dashesy

56

Question trouvée en train de nettoyer les anciennes branches git distantes et cela a fait l'affaire

git branch -r -d origin/my_remote_branch

J'essaie de faire exactement cela depuis environ une heure maintenant, merci beaucoup!
sebkkom

Cela ne supprime pas la branche distante. Si vous allez chercher git, vous verrez à nouveau la branche. Il suffit de le supprimer de votre liste locale de succursales distantes.
Patrick Desjardins

2
@PatrickDesjardins git push origin :my_remote_branchsupprime exactement la branche de la télécommande et la git branch -r -d origin/my_remote_branchsupprime de ma liste locale de branches distantes
Hugo

11

J'ai rencontré cela en essayant de supprimer une branche distante qui avait déjà été supprimée. Tout ce qu'il fallait, c'était un pruneau:

git remote prune origin

4

Essayez de suivre deux options pour supprimer de force la branche distante

Option 1

get push origin --delete <branchName>

Option 2

git fetch -p origin
git branch -r -d origin/<branchName>

3
git branch -r -d origin/my_remote_branch

ne me suffisait pas. Avant, je devais aller sur le serveur et travailler directement avec le répertoire git (ce qui est dangereux et moche) pour supprimer la branche:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch

Ce n'est pas seulement dangereux et moche, c'est aussi faux . D'une part, cette question concerne la suppression de la branche localement lorsqu'elle a été supprimée à distance. Et pour l'autre, la suppression d'une branche à distance n'est qu'une question de git push origin :my_remote_branch. Attention au côlon.
Jan Hudec

Tu as raison Jan, c'est git push origin :my_remote_branchune manière normale. Cette manière moche et dangereuse se produit lorsque cela ne fonctionne pas (par exemple à cause d'un git mal configuré).
pevik

1

J'ai le même problème. Je suis d'abord allé à cette discussion, mais je n'ai pas pu résoudre le problème avant d'avoir vu https://stackoverflow.com/a/32147743/4209849 .

qui ajoutent simplement une astuce pour distinguer origin/my-branch-nameet my-branch-name.

Pour être précis, je devrais utiliser:

git push origin :my_remote_branch

au lieu de

git push origin :origin/my_remote_branch

Cela a résolu mon problème au moins, j'espère que cela aiderait aussi les autres.


1

Pour moi, le problème était que c'était ma branche par défaut sur github. J'ai changé la branche par défaut, puis l'opération de suppression a réussi.

J'espère que ça aide quelqu'un


0

Eu ce même problème, j'ai modifié manuellement mon ./.git/configfichier pour inclure:

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

Ce qui a abouti à: error: src refspec branchName matches more than one.Ce que j'ai corrigé en courant $git tag -d branchName. Après quoi j'ai pu pousser la nouvelle branche en amont.


0

Cela a fonctionné pour moi: j'ai créé la branche distante sur l'interface utilisateur github, puis j'ai poussé ma branche locale qui portait le même nom. Essayez-le au cas où d'autres méthodes ne fonctionneraient pas. Une autre façon serait de créer une nouvelle branche localement et de pousser une branche vide, puis de sélectionner votre commit et de le pousser à nouveau vers votre télécommande.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.