Eliminazione di un ramo git con un nome errato

So che questa non è una domanda di programmazione, ma è legata a git. Ho accidentalmente creato un ramo in git chiamato --track (ho avuto l’ordine di opzioni errate quando ho unito un ramo remoto)

Il comando regolare non funziona:

 git branch -D "--track" 

Ho provato a scappare con le virgolette e le barre a rovescio, ma non funziona.

Qualche idea?

Hai provato

 git branch -D -- --track 

? il ” -- ” è solitamente la convenzione per “ciò che segue non è un’opzione, a prescindere dal suo nome”


Da ” The Art of Unix Programming “, sezione ” Opzioni della riga di comando “:

È anche convenzionale riconoscere un doppio trattino come segnale per interrompere l’interpretazione delle opzioni e trattare letteralmente tutti i seguenti argomenti.

Questa convenzione si trova in altre CLI (Command Line Interface) non necessarie (non necessarie) come cleartool :

Se un argomento nonoption inizia con un trattino ( ), potrebbe essere necessario precederlo con un argomento double-trattino, per impedire che venga interpretato come un’opzione:

 cleartool rmtype -lbtype -- -temporary_label- 

Il P18 (un preprocessore di file veloce e flessibile con funzionalità di elaborazione macro e supporto speciale per l’internazionalizzazione) menziona anche questo e fornisce una buona descrizione dell’idea generale alla base di tale convenzione:

Tutti gli argomenti delle opzioni passati ai comandi iniziano con un trattino singolo.
Tutti gli argomenti delle opzioni (se presenti) devono precedere tutti gli argomenti non opzionali.
La fine degli argomenti delle opzioni può essere segnalata usando un doppio trattino , questo è utile se un argomento non opzionale inizia con un trattino. La terminazione dell’elenco degli argomenti delle opzioni con un trattino doppio funziona per tutti i comandi, anche quelli che non accettano argomenti di opzione.

Lo strumento OptionParser scritto in ruby ​​lo espone anche abbastanza chiaramente: *

Opzione Parsing Termination

È convenzione che un doppio trattino sia un segnale per interrompere l’interpretazione dell’opzione e per leggere le dichiarazioni rimanenti sulla riga di comando letteralmente. Quindi, un comando come:

  app -- -x -y -z 

non ‘vedrà’ i tre flag di modalità. Invece, saranno trattati come argomenti per l’applicazione:

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

Nota: a volte, ci vogliono tre trattini e non due, specialmente quando la CLI segue rigorosamente gli stili di opzioni di Gnu:

Le opzioni della riga di comando dello stile Gnu forniscono supporto per le parole (o le parole chiave), pur mantenendo la compatibilità con le opzioni di stile Unix.
Le opzioni in questo stile sono talvolta definite long_options e le opzioni di stile Unix come short_options .
La compatibilità viene mantenuta precedendo le long_options con due trattini

Simile allo stile Unix double-hyphen ‘ -- ‘, lo stile Gnu ha un three-hyphen ‘ --- ‘ per segnalare che l’analisi dell’opzione è ferma e per trattare il testo rimanente come argomenti (cioè, leggi letteralmente dal comando linea)

Quindi … se ‘ -- ‘ non è abbastanza (dovrebbe essere con i comandi Git), prova ‘ ---

 git branch -D -- --track 

Sto usando msysgit 1.7.0.2 e la soluzione suggerita non funziona:

git branch -D – –track # non funziona

Nessun errore è segnalato, ma il ramo rimane ancora. Ho finito con la rimozione forzata del ramo tramite:

rm .git / refs / heads / – track

Il doppio trattino non ha funzionato per me in remoto con un nome di ramo contenente virgolette doppie e e commerciali. Tuttavia avvolgere le virgolette del nome e sfuggire alle citazioni contenute ha fatto il lavoro:

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

e localmente:

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

Ho avuto un problema simile in cui ho finito per sbaglio con un ramo “-r”. Non riuscivo a capire come rimuoverlo usando i comandi git quindi lo rimuovo solo nella cartella .git:

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

Questa soluzione era sicura perché era l’unica filiale elencata che finiva in “r” ma risolveva il problema …

puoi utilizzare il software mamed sourcetree che può eliminare qualsiasi ramo che ti piace.