Problema
Qualcuno può spiegare cosa è successo? [...] Mi piacerebbe poter eliminare quel ramo, ma Git non funzionerà per me.
Correre
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
in zsh, non hai creato alcun ramo . Invece, hai accidentalmente definito tre funzioni shell , chiamate git
, branch
e SSLOC-201_Implement___str__
, che ignorano i loro parametri (se presenti) e il cui corpo è_of_ProductSearchQuery
. Puoi verificare tu stesso che questo è effettivamente ciò che è accaduto, invocando il comando incorporato zsh chiamato functions
, che elenca tutte le funzioni di shell esistenti:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Sfortunatamente, sebbene le altre due funzioni shell non siano problematiche, la funzione shell chiamata "git" ora oscura la buona fede git
comando !
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
Pertanto, riceverai successivamente l'errore
command not found: _of_ProductSearchQuery
ogni volta che si tenta di eseguire un comando Git, ad es git log
, git status
ecc. (presupponendo, naturalmente, che non _of_ProductSearchQuery
esiste alcun comando chiamato ).
Nota a margine
[...] Ho fatto lo stesso errore:
git:176: command not found: _of_ProductSearchQuery
(con il numero dopo essere git
aumentato ogni volta che digito un comando)
Quel numero corrisponde semplicemente al valore di HISTCMD
, una variabile d'ambiente che contiene
[t] il numero di evento della cronologia corrente in una shell interattiva, in altre parole il numero di evento per il comando che ha causato $HISTCMD
lettura.
Vedi il manuale di zsh per maggiori dettagli.
Soluzione
E come posso tornare alla normalità?
Elimina semplicemente la problematica funzione shell (e le altre due che hai creato per caso, mentre ci sei):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Quindi tutto dovrebbe andare bene.
Cosa succede se unset
anche l'ombra fosse ?!
Bella domanda ! Vi rimando all'eccellente commento di Wumpus W. Wumbley di seguito.
Suggerimenti per la denominazione dei rami
Evita i caratteri shell speciali
Sì, come sottolineato nei commenti, le parentesi sono caratteri validi nei nomi dei rami Git; devi solo citare il nome in modo appropriato, ad es
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Tuttavia, la necessità di citare tali nomi ogni volta che vengono utilizzati come argomenti della riga di comando dovrebbe convincerti a evitare le parentesi nei nomi di riferimento. Più in generale, dovresti (per quanto possibile) evitare personaggi che hanno un significato speciale nelle conchiglie, per evitare sorprese come questa.
Usa nomi di rami semplici
Dovresti comunque mantenere i nomi delle tue filiali brevi e dolci. Descrizioni lunghe come
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
appartengono ai messaggi di commit, non ai nomi delle filiali.