Sto usando zsh e prezto con cygwin. Quando digito questo comando git "git reset HEAD5", zsh non trova HEAD ^. Ma quando passo a usare bash, funziona.
$ git reset HEAD^
zsh: no matches found: HEAD^
Qualcuno ha visto lo stesso problema?
risposte:
7 per risposta № 1Il ^
il carattere viene considerato speciale nelle espansioni del nome file in zsh, ma solo se il EXTENDED_GLOB
l'opzione è impostata:
zsh% setopt noEXTENDED_GLOB
zsh% echo HEAD^
HEAD^
zsh% setopt EXTENDED_GLOB
zsh% echo HEAD^
zsh: no matches found: HEAD^
zsh%
Bash non ha questa funzione. (Per essere precisi, bash ha una funzione glob estesa, abilitata da shopt -s extglob
, ma la sintassi glob estesa di bash non tratta ^
personaggio come speciale.)
Con questa funzione abilitata, ^
è un personaggio speciale simile a *
ma con un significato diverso. Piace *
, puoi inibirne il significato speciale sfuggendolo, racchiudendolo tra virgolette singole o doppie o precedendolo con una barra rovesciata. La citazione è la soluzione più semplice.
Piuttosto che
git reset HEAD^
prova questo:
git reset "HEAD^"
Il significato di ^
il carattere jolly non è pertinente, poiché tutto ciò che devi fare è evitare di usarlo, ma lo citerò comunque. Secondo il manuale di zsh, ^X
corrisponde a qualsiasi cosa tranne Il modello X
. Per il caso di HEAD^
, nulla segue il ^
-- che significa che HEAD^
fiammiferi HEAD
seguito da qualsiasi cosa diversa da niente. Questo è un modo indiretto per dirlo HEAD^
corrisponde ai nomi dei file che iniziano con HEAD
e seguito da una stringa non vuota. File forniti HEAD
, HEAD1
, e HEAD2
, Il modello HEAD^
fiammiferi HEAD1
e HEAD2
.
3 per risposta № 2
numero 449 di oh-my-zsh descrive questo comportamento esatto e fornisce la soluzione.
Il colpevole è l'opzione extended_glob
su zsh. Presto deve impostarlo. Quindi quando digiti HEAD^
zsh prova a creare un'espressione di negazione glob e fallisce con un errore.
In altre parole, setopt extended_glob
ci permette di usare ^
negare i globs.
Per risolverlo, puoi scrivere questa riga sul tuo .zshrc
:
unsetopt nomatch
Con la riga sopra, stiamo dicendo a zsh che vogliamo che quando la corrispondenza del modello fallisce, usate semplicemente il comando "così com'è".
1 per risposta № 3
Una soluzione rapida per evitare il ^
il personaggio è da usare git reset head~1
invece di git reset head^
.
Vedere questo post per la differenza tra i due.