Ответ 1
Проблема
Кто-нибудь может объяснить, что произошло? [...] Я хотел бы удалить эту ветку, но Git не будет работать для меня.
Запустив
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
в zsh, вы не создали ни одной ветки. Вместо этого вы случайно определили три функции оболочки, называемые git
, branch
и SSLOC-201_Implement___str__
, которые игнорируют их параметры (если они есть) и тело которых _of_ProductSearchQuery
. Вы можете сами убедиться, что это действительно так, вызвав встроенную команду zsh под названием functions
, в которой перечислены все существующие функции оболочки:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
К сожалению, хотя две другие функции оболочки не являются проблематичными, функция оболочки, называемая "git", теперь теневая команда 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)
Следовательно, вы впоследствии получите ошибку
command not found: _of_ProductSearchQuery
всякий раз, когда вы пытаетесь запустить команду Git, например. git log
, git status
и т.д. (при условии, что, конечно, не существует команды под названием _of_ProductSearchQuery
).
Боковое примечание
[...] Я получаю ту же ошибку:
git:176: command not found: _of_ProductSearchQuery
(число после
git
увеличивается каждый раз, когда я набираю команду)
Это число просто соответствует значению HISTCMD
, переменной среды, которая содержит
[t] текущий номер события истории в интерактивной оболочке, другими словами, номер события для команды, которая вызывала чтение
$HISTCMD
.
Подробнее см. руководство zsh.
Решение
И как мне вернуться к нормальной жизни?
Просто удалите проблемную функцию оболочки (и две другие, которые вы создали случайно, пока вы на ней):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Тогда все должно быть хорошо.
Что делать, если unset
также затеняется?!
Хороший вопрос! Я отсылаю вас к Wumpus W. Wumbley отличный комментарий ниже.
Советы по наименованию веток
Избегайте любых символов оболочки
Да, как указано в комментариях, круглые скобки являются допустимыми символами в именах ветвей Git; вам просто нужно указать имя соответствующим образом, например.
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Однако необходимость цитирования таких имен каждый раз при использовании в качестве аргументов командной строки должна убеждать вас избегать круглых скобок в именах ссылок. В более общем плане вы должны (насколько это возможно) избегать символов, которые имеют особое значение в оболочках, чтобы предотвратить такие неожиданные сюрпризы.
Использовать простые имена ветвей
В любом случае вы должны держать свои названия ветвей короткими и сладкими. Длинные описания, например
SSLOC-201_Implement ___ ул __() _ of_ProductSearchQuery
принадлежат сообщениям фиксации, а не именам ветвей.