57 votes

Supprimer une branche git mal nommée

Je sais que ce n'est pas strictement une question de programmation, mais c'est lié à git. J'ai accidentellement créé une branche dans git appelée --track (j'ai mal compris l'ordre des options lors de la fusion d'une branche distante)

La commande normale ne fonctionne pas:

 git branch -D "--track"  
 

J'ai essayé de m'échapper avec des guillemets et des barres obliques inversées, mais ni l'un ni l'autre ne fonctionne.

Des idées?

102voto

VonC Points 414372

Avez-vous essayé

git branch -D -- --track

? le " -- " est généralement de la convention de "ce qui suit n'est pas une option, quel que soit son nom"


À partir de "The Art of Unix Programming", section "Options de Ligne de Commande":

Il est également classique de reconnaître un double trait d'union comme un signal d'arrêt de l'option d'interprétation et de traiter tous les arguments suivants littéralement.

Vous trouverez que la convention dans d'autres (pas nécessaire d'Unix associées) CLI (Command Line Interface) comme cleartool:

Si un nonoption argument commence par un tiret () personnage, vous devrez peut-être faire précéder par un double trait d'union argument, pour l'empêcher d'être interprété comme une option:

cleartool rmtype -lbtype -- -temporary_label-

Le P18 (rapide et souple fichier avec la macro du préprocesseur capacités de traitement et de soutien spécial pour l'internationalisation de l') mentionne également et donne une bonne description de l'idée générale derrière cette convention:

Option tous les arguments passés aux commandes de démarrer avec un seul tiret.
Tous les arguments d'option (le cas échéant) doit précéder tous les non-arguments d'option.
La fin de l'option arguments peut être signalé à l'aide d'un double trait d'union, c'est utile si un non-argument commence par un tiret. La résiliation de la liste des arguments d'option avec un double trait d'union fonctionne pour toutes les commandes, même ceux qui ne prennent pas une option arguments.

Le OptionParser outil écrit en ruby également la pose assez clairement:*

L'Option D'Analyse De La Résiliation

Il est de convention, qu'un double trait d'union est un signal d'arrêt de l'option à l'interprétation et à lire les déclarations restantes sur la ligne de commande littéralement. Ainsi, une commande telle que:

 app -- -x -y -z

ne sera pas "voir" les trois mode-drapeaux. Au lieu de cela, ils seront traités comme des arguments de l'application:

 #args = ["-x", "-y", "-z"]


Remarque: parfois, il faut trois tirets et non pas deux, surtout quand la CLI suit strictement la Gnu options de styles:

La Gnu style de ligne de commande options de fournir un soutien pour l'option mots (ou mots-clés), mais encore conserver la compatibilité avec Unix options de style.
Les options de ce style sont parfois appelées long_options et le style Unix options short_options.
La compatibilité est maintenu par précédant la long_options avec deux tirets

Semblable à Unix style double trait d'union '--', la Gnu style a un triple trait d'union '---"pour signaler que l'option analyse être arrêté et pour traiter le reste du texte comme arguments (qui est, de lire littéralement à partir de la ligne de commande)

Alors... si '-- 'n'est pas suffisant (il devrait être avec commandes Git), essayez' --- '

8voto

git branch -D -- --track

4voto

James Kovacs Points 8757

J'utilise msysgit 1.7.0.2 et la solution proposée ne fonctionne pas:

git branch -D - --track # ne fonctionne pas

Aucune erreur n'est signalée, mais la branche reste toujours. J'ai fini par enlever de force la branche via:

rm .git / refs / heads / - track

2voto

igniteflow Points 1247

Le double trait d'union ne fonctionnait pas pour moi avec un nom de branche contenant des guillemets et des esperluettes à distance. Cependant, emballer les guillemets et échapper les guillemets contenus a fait le travail:

 git push origin --delete "123-my-branch-&-some\"quoted-text\""
 

et localement:

 git branch -D "123-my-branch-&-some\"quoted-text\""
 

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