Проблема
Хтось може пояснити, що сталося? [...] Мені б хотілося видалити цю гілку, але 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" тепер затінює команду добросовісного 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 ___ str __ () _ of_ProductSearchQuery
належать до повідомлень про фіксацію, а не до імен гілок.