repositorio lista crear comandos git zsh git-branch parentheses

lista - git push



El nombre de rama complejo de Git rompiĆ³ todos los comandos de Git (1)

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 cuyo cuerpo es _of_ProductSearchQuery . Puede comprobar por sí mismo que esto es lo que sucedió, invocando el comando zsh incorporado 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 git buena fe .

$ 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 exista un comando llamado _of_ProductSearchQuery ).

Nota al margen

[...] Me sale el mismo error:

git:176: command not found: _of_ProductSearchQuery

(con el número después de git aumentando 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 provocó la $HISTCMD .

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.

¿Qué pasa 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 (en la medida de lo 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

Estaba tratando de crear una rama de master con el siguiente comando,

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

cuando Git de repente dejó de responder. Sospecho que los no escapados () tienen la culpa, de alguna manera. Ahora, cada vez que intento ejecutar cualquier comando de Git, aparece el mismo error:

git:176: command not found: _of_ProductSearchQuery

con el número después de git aumentando cada vez que escribo un comando.

¿Alguien puede explicar lo que pasó? ¿Y cómo vuelvo a la normalidad? Me gustaría eliminar esa rama, pero ¿cómo puedo hacer eso?