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.