El comando `git history`
El nuevo comando experimental `history` de Git, que simplifica tareas comunes de `rebase` interactivo como fixups, splits y rewords, está generando reacciones encontradas entre los desarrolladores. Algunos celebran una forma menos friccionada de reescribir y limpiar el historial de commits —especialmente para enseñar a gente junior o mantener registros bien estructurados y aptos para `bisect`—, mientras que otros sostienen que la edición compleja del historial se usa en exceso, prefieren simples merges con squash o temen los problemas de UX y los conflictos. El debate se amplía hacia una crítica a la usabilidad de Git, el valor de los historiales curados frente a los lineales, y herramientas alternativas como jj, Magit, stgit y ayudantes semánticos de diff/merge.
Rol y utilidad de git history
- Los nuevos subcomandos de
git history(fixup,split,reword) se ven como envoltorios ergonómicos para flujos de trabajo comunes degit rebase -i. - Algunos prefieren ceñirse a
rebaseinteractivo para tener un control preciso y “visual” sobre el orden y la edición de los commits. - Se aprecia la capacidad de
git history fixuppara reescribir automáticamente todas las ramas descendientes, especialmente en comparación conrebase --update-refs, que se comporta de forma más limitada. - Se señaló una limitación:
git historyactualmente elimina las firmas GPG de los commits reescritos, lo que empuja a algunos usuarios de vuelta arebase -i.
Gestión de conflictos y problemas de UX
- Fuerte desacuerdo sobre lo “asustantes” que realmente son los rebases y los conflictos.
- Un lado: los conflictos son una parte normal de componer intenciones distintas; el miedo refleja una mala comprensión del código o del modelo de git.
- El otro lado: incluso con buena comprensión, la UX en torno a los estados de rebase, “ours/theirs”, las herramientas interactivas y las ediciones a mitad de rebase resulta frágil y agotadora mentalmente.
- Algunos sostienen que Git trata el código como texto plano; otros responden que los diffs basados en líneas son una aproximación pragmática y que pueden mejorarse con herramientas basadas en tree-sitter.
Redes de seguridad y recuperación
- Varios recordatorios de que
git rebase --abort,git reflog, las etiquetas/ramas ligeras ygit resethacen que experimentar sea seguro. - Varias personas crean habitualmente ramas “before-rebase” o usan sintaxis de reflog (por ejemplo,
branch@{1}) para recuperar estados anteriores.
Flujos de trabajo: granularidad de commits, reescritura de historial y squashing
- División clara:
- Bando de “curar el historial”: commits pequeños, lógicos y fáciles de bisecar; el historial se usa para depuración, regresiones y entender la intención. Se fomenta reescribir el historial no fusionado; el squashing se ve como tirar valor a la basura.
- Bando de “squash/append-only”: las PR como unidades atómicas; los commits internos son “registros de trabajo” ruidosos y deberían fusionarse con squash antes del merge. Énfasis en la eficiencia del revisor y el valor de negocio por encima del historial de grano fino.
- Debate sobre si conservar commits de pruebas fallidas, commits de fixup y cadenas de revert es útil (como evidencia de TDD y arqueología) o perjudicial (rompe
git bisectsimple, complicablame).
Herramientas y alternativas
- Varios recomiendan herramientas de nivel superior para domar la complejidad:
- GUIs como TortoiseGit, Magit y lazygit.
- Herramientas de pila de parches como
stgit. - Sistemas más nuevos como
jj, que muchos elogian conceptualmente pero encuentran aún ásperos en la interoperabilidad con Git.
- Hay consenso en que mejores interfaces y vistas con estado reducen significativamente la carga cognitiva de las operaciones avanzadas de Git.
Curva de aprendizaje de Git y modelos mentales
- Algunos insisten en que entender el modelo de datos interno de Git (mediante documentación/libros) hace que todo encaje y que muchas quejas se deben a no haber invertido ese tiempo.
- Otros responden que la confusión generalizada indica problemas reales de UX, independientemente de la simplicidad teórica.