Nuevo comando Git: git history fixup
Publicado el Viernes, 3 de julio de 2026
En git v2.54 se agregó el comando experimental git history, con la posibilidad de cambiar el mensaje de un commit y separar commits. En la versión 2.55 se agregó otro comando a git history, fixup. Esto es algo que vengo queriendo en git desde hace años. De hecho pregunté una vez en lo que solía ser Twitter algo así como:
Colegas programadores, desarrolladores, fanáticos de Git, etc.: ¿Existe algún atajo en git para
git commit -m 'fixup' && git rebase -i HEAD~loquesea? Me gustaría hacer fixup/squash de mis cambios con un commit anterior (no necesariamente el último). Agregar cambios y entrar a la pantalla de rebase interactivo con un sólo comando.
Ya en ese tweet me respondieron que mirara autosquash, pero al ser dos comandos en los que tenía que copiar el hash del commit, me pareció más simple seguir con lo que venía acostumbrado. En mi proceso de trabajo con Git, es muy común que cree un commit nuevo con el mensaje de "fixup coso" o similar. Después ejecuto git rebase -i HEAD~X - siendo X la cantidad de commits para atrás - y hago fixup con otro commit anterior.
Si bien git history fixup no es exactamente lo que decía en ese tweet, resuelve el problema en un comando. La documentación oficial se traduce en algo así: (perdón por el uso de stageados, otra brutalidad del léxico informático)
fixup <commit>
Aplicar los cambios actuales stageados al commit especificado. Esto es similar en su naturaleza a git commit --fixup=<commit> seguido de git rebase --autosquash <commit> Los cambios se aplican al commit destino realizando un merge de tres partes entre el commit HEAD, el commit destino y el árbol generado por los cambios stageados.
Por defecto se conservan el mensaje y autor del commit, a menos que especifiquemos --reedit-message.
Si aplicar los cambios resultara en un conflicto, el comando aborta con un error. Todas las ramas que sean descendientes del commit original se actualizan al punto de la historia reescrita.
Para probar un ejemplo, creé un repositorio simple:
$ cd git_fixup
$ git init
Initialized empty Git repository in /home/fernando/workspace/git_fixup/.git/
$ touch juegos_switch2_junio.org
Cree el directorio git_fixup, inicializé un repositorio git, y creé el archivo juegos_switch2_junio.org para llevar un registro de juegos que jugué el mes pasado en Nintendo Switch 2. El archivo se ve así:
* Bubsy 4D
* Yooka Replaylee
* Mario Kart Word
* Marvel Cosmic Invasion
* High on Life
* River City Saga: Journey to the West
* Rayman 30th Anniversary Edition
Agrego el archivo al control de versiones y hago commit:
$ git commit -m "Lista de juegos que jugué en Junio en Nintendo Switch 2"
Ahora agrego un archivo nuevo con la lista de juegos que jugué en Junio con Steam, y hago otro commit con el mensaje "Lista de juegos Steam". Ejecuto git log y veo lo siguiente:
commit ae0f4f4e462ef82ff589545a8c308ba26d3acc8c (HEAD -> master)
Author: Fernando Briano
Lista de juegos Steam
commit fe79b7ccd2e0c4e169255edfc844f68f1fa0117f
Author: Fernando Briano
Lista de juegos que jugué en Junio en Nintendo Switch 2
Recordé que me faltó agregar Star Fox a la lista de juegos de Switch 2. Así que edito el archivo, agrego Star Fox y vuelvo a hacer git add. El archivo quedó stageado. Acá es donde entra la magia, quiero que este cambio sea parte del primer commit con hash fe79b7ccd2e0c4e169255edfc844f68f1fa0117f. Así que ejecuto:
¡Y quedó! Mirando el git log, vemos que los commits tienen un nuevo hash:
commit 401d467405247c487194dc72b42ddb436b89c070 (HEAD -> master)
Author: Fernando Briano
Lista de juegos Steam
commit 23ef615e396c85dea91d77678c30434acba6474b
Author: Fernando Briano
Lista de juegos que jugué en Junio en Nintendo Switch 2
Y si vemos los cambios del primer commit, está listado Star Fox como si lo hubiera hecho desde un principio. También se mantiene el autor y la hora/fecha de cada commit:
commit 23ef615e396c85dea91d77678c30434acba6474b
Author: Fernando Briano
Lista de juegos que jugué en Junio en Nintendo Switch 2
diff --git a/juegos_switch2_junio.org b/juegos_switch2_junio.org
new file mode 100644
index 0000000..2606bcc
--- /dev/null
+++ b/juegos_switch2_junio.org
@@ -0,0 +1,10 @@
+Juegos que jugué en Junio en Nintendo Switch 2:
+
+* Bubsy 4D
+* Yooka Replaylee
+* Mario Kart Word
+* Marvel Cosmic Invasion
+* High on Life
+* River City Saga: Journey to the West
+* Rayman 30th Anniversary Edition
+* Star Fox
Otro comando nuevo de git que me resulta súper práctico y probablemente empiece a usar seguido a partir de ahora.







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