Problem
Czy ktoś może wyjaśnić, co się stało? [...] Chciałbym móc usunąć tę gałąź, ale Git nie będzie dla mnie działać.
Biegiem
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
w Zsh nie utworzyłeś żadnej gałęzi . Zamiast tego przypadkowo zdefiniowałeś trzy funkcje powłoki , nazwane git
, branch
i SSLOC-201_Implement___str__
, które ignorują ich parametry (jeśli istnieją) i których treść jest _of_ProductSearchQuery
. Możesz sam sprawdzić, czy tak właśnie się stało, wywołując wbudowane polecenie zsh functions
, które wyświetla wszystkie istniejące funkcje powłoki:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Niestety, chociaż pozostałe dwie funkcje powłoki nie są problematyczne, funkcja powłoki o nazwie „git” teraz cienia polecenia bona fide git
!
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
Dlatego pojawi się błąd
command not found: _of_ProductSearchQuery
gdy spróbujesz uruchomić polecenie git przykład git log
, git status
itd (zakładając oczywiście, że ma polecenia o nazwie _of_ProductSearchQuery
istnieje).
Dygresja
[...] Otrzymuję ten sam błąd:
git:176: command not found: _of_ProductSearchQuery
(z liczbą git
rosnącą za każdym razem, gdy wpisuję polecenie)
Liczba ta po prostu odpowiada wartości HISTCMD
zmiennej środowiskowej, która zawiera
[t] bieżący numer zdarzenia historii w interaktywnej powłoce, innymi słowy numer zdarzenia dla polecenia, które spowodowało $HISTCMD
odczytanie.
Więcej informacji znajduje się w instrukcji obsługi Zsh .
Rozwiązanie
Jak mogę wrócić do normy?
Po prostu usuń problematyczną funkcję powłoki (i dwie pozostałe, które utworzyłeś przypadkowo, gdy jesteś przy niej):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Wtedy wszystko powinno być w porządku.
Co jeśli unset
jest również śledzony ?!
Dobre pytanie ! Odsyłam do wumpusa W. Wumbley wspaniałe komentarzu poniżej.
Wskazówki dotyczące nazewnictwa gałęzi
Unikaj specjalnych znaków powłoki
Tak, jak wskazano w komentarzach, nawiasy są prawidłowymi znakami w nazwach gałęzi Git; wystarczy odpowiednio podać nazwę, np
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Jednak potrzeba cytowania takich nazw za każdym razem, gdy są używane jako argumenty wiersza poleceń, powinny przekonać cię do unikania nawiasów w nazwach referencyjnych. Mówiąc bardziej ogólnie, powinieneś (o ile to możliwe) unikać znaków, które mają specjalne znaczenie w muszlach, aby uniknąć takich niespodzianek.
Użyj prostych nazw gałęzi
W każdym razie powinieneś utrzymywać krótkie i słodkie nazwy swoich oddziałów. Długie opisy jak
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
należą do komunikatów zatwierdzania, a nie do nazw gałęzi.