Reordenar commits en una rama local

Aprende cómo reordenar commits de una rama local que no se ha subido aún al repositorio.

reordenar-commits-rama-local

Trabajar con Git nos da flexibilidad para estructurar la historia de cambios en nuestro código. A veces, los commits no quedan en el orden ideal: tal vez agregamos un cambio antes de escribir la documentación o corregimos un error en un commit posterior. En estos casos, podemos reordenarlos sin afectar la base del proyecto.

Usando git rebase -i

La herramienta principal para reorganizar commits es git rebase en modo interactivo. Esto nos permite modificar la historia de la rama local sin afectar a otras ramas o al repositorio remoto (hasta que hagamos un push).

Paso 1: Iniciar el rebase interactivo

Para comenzar, ejecutamos:

Terminal
git rebase -i HEAD~N

Donde N es el número de commits que queremos revisar. Por ejemplo, si queremos reordenar los últimos 4 commits, usamos:

Terminal
git rebase -i HEAD~4

Paso 2: Modificar la lista de commits

Git abrirá un editor de texto con una lista similar a esta:

Terminal
pick abc123 Primer commit
pick def456 Segundo commit
pick ghi789 Tercer commit
pick jkl012 Cuarto commit

Cada línea representa un commit, identificado por su hash. Podemos cambiar el orden simplemente moviendo las líneas arriba o abajo.

Por ejemplo, si queremos que el tercer commit pase a ser el primero, reorganizamos así:

Terminal
pick ghi789 Tercer commit
pick abc123 Primer commit
pick def456 Segundo commit
pick jkl012 Cuarto commit

Paso 3: Guardar y salir

Una vez ordenados los commits, guardamos y cerramos el editor. Git aplicará los cambios en el nuevo orden.

Si hay conflictos, Git nos lo indicará. En ese caso, resolvemos los conflictos manualmente, hacemos git rebase --continue y seguimos hasta completar el proceso.

Evitar problemas al reordenar commits

  • No reordenar commits que ya se hayan subido a un repositorio remoto compartido. Esto reescribe la historia y puede causar problemas a otros colaboradores.
  • Hacer un respaldo antes de un rebase complejo. Podemos crear una rama temporal con git branch respaldo.
  • Usar git log --oneline --graph antes y después para visualizar los cambios en la historia.

Si algo sale mal, podemos abortar el rebase en cualquier momento con:

Terminal
git rebase --abort

Reordenar commits nos ayuda a mantener una historia de cambios más clara y organizada. Con un poco de práctica, este proceso se vuelve parte natural del flujo de trabajo.