/ / zsh non riconosce HEAD ^ - cygwin, zsh, prezto

zsh non riconosce HEAD ^ - cygwin, zsh, prezto

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 № 1

Il ^ 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.