/ / zsh nie rozpoznaje HEAD ^ - cygwin, zsh, prezto

zsh nie rozpoznaje HEAD ^ - cygwin, zsh, prezto

Używam zsh i prezto z cygwin. Kiedy wpisuję polecenie git "git reset HEAD5", zsh nie odnalazł HEAD ^. Ale kiedy przełączam się na bash, działa.

$ git reset HEAD^
zsh: no matches found: HEAD^

Czy ktoś widział ten sam problem?

Odpowiedzi:

7 dla odpowiedzi № 1

The ^ znak jest traktowany jako specjalny w rozszerzeniach nazw plików w zsh, ale tylko jeśli EXTENDED_GLOB opcja jest ustawiona:

zsh% setopt noEXTENDED_GLOB
zsh% echo HEAD^
HEAD^
zsh% setopt EXTENDED_GLOB
zsh% echo HEAD^
zsh: no matches found: HEAD^
zsh%

Bash nie ma tej funkcji. (Mówiąc prościej, bash ma rozszerzoną funkcję globalną, włączoną przez shopt -s extglob, ale rozszerzona składnia globu basha nie traktuje ^ postać jako specjalna.)

Po włączeniu tej funkcji, ^ jest specjalną postacią podobną do * ale o innym znaczeniu. Lubić *, możesz powstrzymać jego specjalne znaczenie, uciekając od niego, zamykając je pojedynczymi lub podwójnymi cudzysłowami lub poprzedzając je odwrotnym ukośnikiem. Cytowanie jest najprostszym rozwiązaniem.

Zamiast

git reset HEAD^

Spróbuj tego:

git reset "HEAD^"

Znaczenie ^ wildcard nie ma znaczenia, ponieważ wszystko, co musisz zrobić, to unikać używania go, ale mimo to wspomnę o tym. ^X pasuje do wszystkiego z wyjątkiem wzór X. Dla przypadku HEAD^nic nie podąża za ^ -- co oznacza że HEAD^ mecze HEAD po czym następuje coś innego niż nic. To okrężny sposób powiedzenia tego HEAD^ dopasowuje nazwy plików zaczynające się od HEAD a następnie jakiś niepustny ciąg. Podane pliki HEAD, HEAD1, i HEAD2, wzór HEAD^ mecze HEAD1 i HEAD2.


3 dla odpowiedzi № 2

numer 449 of oh-my-zsh opisuje to dokładne zachowanie i zapewnia rozwiązanie.

Winowajcą jest opcja extended_glob na zsh. Presto musi to ustawiać. Więc kiedy piszesz HEAD^ zsh próbuje utworzyć wyrażenie globu negacji i nie powiedzie się z błędem.

Innymi słowy, setopt extended_glob pozwala nam korzystać ^ negować globs.

Aby to naprawić, możesz napisać ten wiersz na swoim .zshrc:

unsetopt nomatch

W powyższym wierszu mówimy, że zsh, którego chcemy, gdy deseń nie powiedzie się, wystarczy użyć polecenia "tak jak jest".


1 dla odpowiedzi nr 3

Szybkie obejście, aby uniknąć ^ postać ma użyć git reset head~1 zamiast git reset head^.

Widzieć ten post na różnicę między tymi dwoma.