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 № 1The ^
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.