Problema
¿Alguien puede explicar lo que pasó? [...] Me encantaría poder eliminar esa rama, pero Git no funcionará para mí.
Mediante la ejecución
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
en zsh, no creaste ninguna rama . En su lugar, definió accidentalmente tres funciones de shell , llamadas git
, branch
y SSLOC-201_Implement___str__
, que ignoran sus parámetros (si los hay) y de quién es el cuerpo _of_ProductSearchQuery
. Puede verificar por sí mismo que esto es lo que sucedió, invocando el comando incorporado zsh llamado functions
, que enumera todas las funciones de shell existentes:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Desafortunadamente, aunque las otras dos funciones de shell no son problemáticas, la función de shell llamada "git" ahora oculta el comando de buena fe 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)
Por lo tanto, posteriormente recibirá el error
command not found: _of_ProductSearchQuery
cada vez que intente ejecutar un comando Git, por ejemplo git log
, git status
etc. (suponiendo, por supuesto, que no _of_ProductSearchQuery
existe ningún comando llamado ).
Nota al margen
[...] Me sale el mismo error:
git:176: command not found: _of_ProductSearchQuery
(con el número después de git
aumentar cada vez que escribo un comando)
Ese número simplemente corresponde al valor de HISTCMD
, una variable de entorno que contiene
[l] l número de evento del historial actual en un shell interactivo, en otras palabras, el número de evento para el comando que causó la $HISTCMD
lectura.
Consulte el manual de zsh para más detalles.
Solución
¿Y cómo vuelvo a la normalidad?
Simplemente elimine la función de shell problemática (y las otras dos que creó por accidente, mientras está en ello):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Entonces todo debería estar bien.
¿Y si unset
también está sombreado?
Buena pregunta ! Os remito al excelente comentario de Wumpus W. Wumbley a continuación.
Consejos para nombrar sucursales
Evita los caracteres especiales de shell
Sí, como se señala en los comentarios, los paréntesis son caracteres válidos en los nombres de rama de Git; solo necesita citar el nombre apropiadamente, ej.
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Sin embargo, la necesidad de citar dichos nombres cada vez que se usan como argumentos de línea de comandos debería convencerlo de que evite los paréntesis en los nombres de referencia. En términos más generales, debe (tanto como sea posible) evitar los personajes que tienen un significado especial en las conchas, para evitar sorpresas como esta.
Use nombres de rama simples
Debes mantener los nombres de tus sucursales cortos y dulces de todos modos. Descripciones largas como
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
pertenecer a mensajes de confirmación, no a nombres de sucursal.