Problem
Kann jemand erklären, was passiert ist? [...] Ich würde gerne diesen Zweig löschen können, aber Git funktioniert bei mir nicht.
Durch Laufen
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
In zsh haben Sie keinen Zweig erstellt . Stattdessen haben Sie versehentlich drei Shell-Funktionen definiert , die als git
, branch
und bezeichnet werden und SSLOC-201_Implement___str__
deren Parameter (falls vorhanden) ignorieren und deren Körper sich befindet _of_ProductSearchQuery
. Sie können selbst überprüfen, ob dies tatsächlich der Fall ist, indem Sie den eingebauten Befehl zsh aufrufen functions
, der alle vorhandenen Shell-Funktionen auflistet:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Obwohl die beiden anderen Shell-Funktionen nicht problematisch sind, überschattet die Shell-Funktion "git" jetzt leider den echten git
Befehl!
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
Daher erhalten Sie anschließend den Fehler
command not found: _of_ProductSearchQuery
wenn Sie versuchen , einen Git - Befehl auszuführen, zum Beispiel git log
, git status
usw. (vorausgesetzt natürlich, dass kein Befehl aufgerufen _of_ProductSearchQuery
existiert).
Randnotiz
[...] Ich erhalte den gleichen Fehler:
git:176: command not found: _of_ProductSearchQuery
(mit der Zahl nach git
Erhöhung jedes Mal, wenn ich einen Befehl eingebe)
Diese Zahl entspricht einfach dem Wert HISTCMD
einer Umgebungsvariablen, die gilt
[t] Die aktuelle Verlaufsereignisnummer in einer interaktiven Shell, dh die Ereignisnummer für den Befehl, der $HISTCMD
zum Lesen geführt hat.
Weitere Informationen finden Sie im zsh-Handbuch .
Lösung
Und wie komme ich wieder zur Normalität?
Löschen Sie einfach die problematische Shell-Funktion (und die beiden anderen, die Sie versehentlich erstellt haben, während Sie gerade dabei sind):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Dann sollte alles in Ordnung sein.
Was ist, wenn auch unset
Schatten ist?!
Gute Frage ! Ich verweise Sie auf Wumpus W. Wumbleys hervorragenden Kommentar unten.
Tipps zur Benennung von Zweigen
Vermeiden Sie spezielle Shell-Zeichen
Ja, wie in den Kommentaren erwähnt, sind Klammern gültige Zeichen in Git-Zweignamen. Sie müssen nur den Namen entsprechend zitieren, z
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Die Notwendigkeit, solche Namen jedes Mal in Anführungszeichen zu setzen, wenn sie als Befehlszeilenargumente verwendet werden, sollte Sie jedoch davon überzeugen, Klammern in Referenznamen zu vermeiden. Im Allgemeinen sollten Sie (so weit wie möglich) Zeichen vermeiden, die in Muscheln eine besondere Bedeutung haben, um Überraschungen wie diese zu vermeiden.
Verwenden Sie einfache Filialnamen
Sie sollten Ihre Filialnamen trotzdem kurz und bündig halten. Lange Beschreibungen mögen
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
gehören in Commit-Nachrichten, nicht in Filialnamen.