Nuevo comando git history para modificar commits en git
Publicado el Jueves, 30 de abril de 2026
Recientemente se publicó la versión 2.54 de Git, el sistema de control de versiones distribuido. Esta incluye un comando nuevo experimental git history que permite cambiar el texto de un commit en la historia, o dividirlo.
Al ser experimental, el comportamiento puede cambiar en versiones futuras. Pero por el momento lo podemos usar como comento por acá.
En lo personal estoy muy acostumbrado a usar git rebase para cambiar la historia de un repositorio. Entrando a un rebase interactivo con git rebase -i se puede elegir el commit y hacer un reword para cambiar el mensaje o edit para dividirlo, entre otras cosas. El objetivo de history es hacer que esta tarea sea más fácil. Tengo tan memorizados los comando git que uso a menudo que me va a costar, pero estoy intentando probar git history.
Para explicar estos comandos, voy a usar de ejemplo el código de ci_uy. En la consola ejecuto git lg y veo lo siguiente:
* 5f916fb - Corrige teclazo accidental (4 months ago)
* d4606fa - Actualiza encabezado de licencia, metadata de gema (4 months ago)
* 52a9430 - Actualiza el CHANGELOG (4 months ago)
* ae7b104 - Actualiza README (4 months ago)
Primero veo cómo cambiar un mensaje de commit con git history reword. Supongamos que quiero cambiar el texto del commit 5f916fb (Corrige teclazo accidental). Ejecuto:
Esto llama el editor de texto configurado en el sistema (en mi caso Emacs, siempre Emacs...) con el texto del commit: "Corrige teclazo accidental". Le agrego un punto al final, guardo, y quedó editado el mensaje. Los hash de éste commit y los siguientes se actualizan:
* 648c6f8 - Corrige teclazo accidental. (4 months ago) <Fernando Briano>
Para probar git history split, podemos usar de ejemplo el commit d4606fa que tiene dos cambios (Actualiza encabezado de licencia, metadata de gema). Ejecuto:
Esto nos muestra el comando interactivo de Git donde van apareciendo todos los cambios del commit. Nos pregunta qué queremos hacer con cada uno (a efectos de esta acción, si incluirlo o no). Lo primero que me aparece es el cambio de licencia, así que lo agrego y hago un commit con esa parte sóla:
diff --git a/LICENSE b/LICENSE
index a5c2088..1cdb3ad 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
CiUY - A gem to validate Uruguayan Identity Documents (Cedula de Identidad Uruguaya)
-Copyright (C) 2013-2019 Fernando Briano
+Copyright (C) 2013 Fernando Briano
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
(1/1) Stage this hunk [y,n,q,a,d,?]?
Respondo que no a todos los cambios que le siguen y git me vuelve a mostrar Emacs para agregar un nuevo mensaje de commit. Me trae el mensaje viejo "Actualiza encabezado de licencia, metadata de gema". Así que borro todo lo que está después de la coma y guardo. Al guardar y cerrar, aparece nuevamente el editor de texto con el mismo mensaje anterior. Este va a ser el mensaje de commit del resto de los cambios, así que escribo "Actualiza metadata de gema." y guardo y cierro. El nuevo estado de la historia:
* d091ac1 - Corrige teclazo accidental. (4 months ago)
* 2c19741 - Actualiza metadata de gema. (4 months ago)
* dfba80c - Actualiza encabezado de licencia. (4 months ago)
Son comandos bastante prácticos, creo que sí terminan ahorrando tiempo. Veremos si me termino de acostumbrar o sigo usando git rebase -i por costumbre. Tendré que estar atento para ver cómo evoluciona git history. Para empezar a usarlo, podemos instalar la versión 2.54 de git en nuestro sistema.
Instalar la versión más reciente de git
Si usamos alguna distribución Linux basada en Debian, podemos agregar un PPA oficial que ofrece la última versión estable de Git:
# apt update; apt install git
En la página de instalación hay información para más distribuciones Linux y otros sistemas operativos: Fedora, Gentoo, openSUSE, Mageia, Nix/NixOS, FreeBSD, Solaris, OpenBSD, Alpine, Red Hat, Slitaz y más. Como es habitual, también podemos compliar la versión más reciente desde el código fuente.






No hay comentarios en este post - Feed de comentarios
Dejar un comentario