проблема
Кто-нибудь может объяснить, что случилось? [...] Я хотел бы иметь возможность удалить эту ветку, но 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
принадлежат сообщениям фиксации, а не именам веток.