2009-07-28 18 views
45

Sé que esto no es estrictamente una cuestión de programación, pero está relacionado con git. Accidentalmente he creado una sucursal en git llamada --track (me dieron el orden de las opciones mal cuando la fusión de una rama remota)Eliminar una rama git mal llamada

El comando normal no funciona:

git branch -D "--track" 

he tratado de escapar con citas y las barras hacia atrás, sin embargo, tampoco funcionan.

¿Alguna idea?

+0

Me gustaría saber cómo se logró crear esa rama en primer lugar. No parece que hayas hecho "git branch --track". ¿O lo hiciste? –

+3

Aquí está la línea ofensiva, estaba intentando rastrear una rama remota. git branch -b - origen de origen/dev – Felix

+0

Las comillas o barras no funcionan porque su caparazón las interpreta antes, mientras que el problema reside en Git y su análisis de argumentos. – Kos

Respuesta

79

¿Usted intentó

git branch -D -- --track 

? la "--" es por lo general la convención de "lo que sigue no es una opción, cualquiera que sea su nombre"


De "The Art of Unix Programming", sección "Command-Line Options":

It is also conventional to recognize a double hyphen as a signal to stop option interpretation and treat all following arguments literally.

Usted encontrará que la convención en otros (no es necesario Unix relacionada) CLI (Command Line Interface) como cleartool:

If a nonoption argument begins with a hyphen () character, you may need to precede it with a double-hyphen argument, to prevent it from being interpreted as an option:

cleartool rmtype -lbtype -- -temporary_label- 

El P18 (un preprocesador de archivos rápida y flexible con capacidad de procesamiento de macro y un apoyo especial para la internacionalización) menciona que también, y da una buena descripción de la idea general detrás de esa convención:

All option arguments passed to the commands start with a single hyphen.
All option arguments (if any) must precede all non-option arguments.
The end of the option arguments may be signaled using a double hyphen, this is useful if a non-option argument starts with a hyphen. Terminating the list of option arguments with a double hyphen works for all commands, even those that don't take any option arguments.

La herramienta OptionParser escrito en rubí también pone a cabo con toda claridad: *

análisis de las opciones de terminación

It is convention that a double hyphen is a signal to stop option interpretation and to read the remaining statements on the command line literally. So, a command such as:

app -- -x -y -z 

will not ‘see’ the three mode-flags. Instead, they will be treated as arguments to the application:

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

Nota: a veces, se necesitan tres guiones y no dos, especialmente cuando la CLI sigue estrictamente las Opciones de GNU estilos:

The Gnu style command line options provide support for option words (or keywords), yet still maintain compatibility with the Unix style options.
The options in this style are sometimes referred to as long_options and the Unix style options as short_options.
The compatibility is maintained by preceding the long_options with two dashes

Similar to the Unix style double-hyphen ’ -- ’, the Gnu style has a triple-hyphen ’ --- ’ to signal that option parsing be halted and to treat the remaining text as arguments (that is, read literally from the command line)

Así que ... si '--' no es suficiente (debe ser con comandos de Git), intente con '---'

+1

Es - ¿una convención para git solamente o para la mayoría de las herramientas de línea de comandos de Linux? – ZelluX

+0

@Zelux: buena pregunta. Solo estaba revisando eso. No confirmado por ahora. – VonC

+0

Quizás no todo, pero ciertamente para conceptos básicos como rm. Es una forma de deshacerse de un archivo llamado "-rf" .... – quark

7
git branch -D -- --track 
4

estoy usando msysgit 1.7.0.2 y la solución sugerida no funciona:

git rama -D - --track # no funciona

se ha notificado ningún error, pero la rama sigue siendo . Terminé eliminando a la fuerza la sucursal a través de:

rm.git/refs/heads/- track

1

El guion doble no funcionó para mí en el control remoto con un nombre de rama que contiene comillas dobles y símbolos. Sin embargo envolver las cotizaciones nombre y escapar de las cotizaciones contenidas hicieron el trabajo:

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

y localmente:

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

que tenía un problema similar donde accidentalmente terminó con una rama "r". No podía encontrar la manera de eliminar utilizando los comandos git por lo que sólo se quita en la carpeta .git:

$ cd .git/refs/head $ ls *r -r $ rm "*r"

Esta solución era sólo es seguro, ya que fue la única rama que terminó en la lista "r "pero resolvió el problema ...

0

puede utilizar el software mamed sourcetree que puede eliminar cualquier rama que desee.

Cuestiones relacionadas