Mi commit favorito de Git (2019)
Una pequeña corrección de un solo carácter que eliminó un espacio en blanco no ASCII de un archivo de configuración da pie a un debate más amplio sobre cuánto esfuerzo deben dedicar los desarrolladores a los mensajes de commit de Git. Muchos sostienen que los mensajes ricos y bien estructurados son invaluables para la depuración futura, la arqueología del código y las revisiones, especialmente cuando los rastreadores de issues o wikis desaparecen o son difíciles de buscar; otros responden que los mensajes largos y narrativos rara vez se leen, pertenecen a documentación separada o descripciones de PR, y quedan debilitados por herramientas que solo muestran la primera línea. La discusión también aborda temas relacionados como los caracteres Unicode “inteligentes” que rompen herramientas, el impacto de los squash merges y la mala higiene del historial, y la necesidad de mejores interfaces que hagan más fácil encontrar y usar el contexto histórico.
Comillas tipográficas, Unicode y caracteres “gremlin”
- Muchos relatan roturas causadas por comillas tipográficas y espacios en blanco no ASCII en archivos de configuración o de código fuente (a menudo a través de Outlook, editores de macOS, TextEdit, Notes).
- Algunos sostienen que las comillas tipográficas y los distintos espacios en blanco deben ser puntos de código distintos por motivos de idioma y tipografía; otros dicen que el Unicode excesivamente semántico es un error de diseño y que el estilo debería gestionarse con fuentes.
- Hay debate sobre si el software debería convertir automáticamente las comillas tipográficas, y las reglas de comillas localizadas junto con la detección de idioma lo dificultan.
- Varios usuarios ahora dependen del resaltado en el IDE, hooks de pre-commit, reasignación de teclado o configuración del editor para evitar o detectar estos caracteres.
Valor y estilo de los mensajes de commit detallados
- Muchos elogian el commit de ejemplo: contexto rico, explicación clara de un bug sutil y registro del proceso de depuración.
- Otros lo encuentran una excesiva “pared de texto”; quieren un resumen conciso (especialmente la primera línea), idealmente al estilo BLUF/TL;DR, con detalle opcional debajo.
- Estructura sugerida común: asunto breve que explique el problema y el alcance, luego párrafos sobre el comportamiento actual, la causa y el nuevo comportamiento.
Mensajes de commit frente a otra documentación
- Un sector ve los mensajes de commit como documentación clave y duradera, especialmente al hacer
blame/arqueología del historial años después o cuando sistemas como Jira/Confluence desaparecen. - Otro sector prefiere mantener la justificación de diseño profunda en issues, descripciones de PR o documentos markdown, ya que los mensajes de commit son inmutables y más difíciles de refinar colaborativamente.
- Hay un amplio acuerdo en que los mensajes de commit deberían documentar más el “por qué” que el “qué”; el diff ya muestra los cambios de código.
Herramientas, flujos de trabajo y capacidad de descubrimiento
- Varios señalan que las herramientas comunes y los forges alojados solo muestran la primera línea, por lo que los cuerpos largos se aprovechan poco.
- Algunos argumentan que Git y las GUIs hacen demasiado tediosa la exploración del historial, desincentivando depender de los mensajes de commit; otros responden que buenas herramientas de editor/CLI (
blame,log, magit, integraciones de IDE) lo hacen bastante usable. - Se critica que los squash merges y las ramas largas y desordenadas destruyan historial útil y fomenten commits de “checkpoint”.
- Hay frustración con mensajes de error deficientes y validación débil para codificaciones inválidas; mejores herramientas podrían haber evitado el bug por completo.
Consejos prácticos mencionados
- Usa configuraciones del editor, resaltado de sintaxis o hooks para señalar espacios en blanco no ASCII.
- Prefiere commits atómicos, bien acotados, con mensajes significativos; trata los mensajes de commit como “notas para tu yo del futuro”.
- Evita depender solo de trackers externos o PRs; enlázalos, pero mantén el contexto esencial cerca del código o en el historial.