Gestión de parches en Git: Generación y aplicación con format-patch y am

Para compartir cambios entre repositorios sin utilizar un servidor remoto, Git permite exportar commits como archivos de parche. La herramienta principle para esta tarea es format-patch. Este comando crea archivos .patch que contienen tanto los cambios en el código como los metadatos del commit (autor, fecha, mensaje).

Generación de parches

El comando git format-patch permite seleccionar commits específicos o rangos para exportarlos. A continuación, se muestran las variaciones más útiles:

# Generar un parche para el último commit
git format-patch HEAD~1

# Generar parches para los últimos tres commits
git format-patch HEAD~3

# Crear parches para un rango específico de commits (excluyendo el commit inicial)
git format-patch a1b2c3d..e4f5g6h

# Generar el parche de un commit específico usando su hash
git format-patch -1 a1b2c3d

# Exportar todos los commits desde el inicio del historial hasta un punto dado
git format-patch --root e4f5g6h

Aplicación de parches: git am vs git apply

Una vez generados los archivos, existen dos métodos principales para integrarlos en otra rama o repositorio:

  • git am (apply mailbox): Aplica el parche y crea un nuevo commmit conservando la información original del autor y el mensaje. Es ideal para mantener el historial intacto. Los cambios se integran directamente en el historial de commits.
  • git apply: Modifica los archiovs en el directorio de trabajo. Por defecto, no crea un commit ni preserva los metadatos del autor original. Los archivos modificados quedan listos para ser revisados y confirmados manualmente mediante git add y git commit.

Resolución de errores comunes

Si una operación con git am se interrumpe debido a conflictos de fusión, Git puede bloquear futuras aplicaciones mostrando un error similar al siguiente:

fatal: previous rebase directory .git/rebase-apply still exists but mbox given.

Esto ocurre porque quedó un estado de aplicación inconcluso en el directorio .git/rebase-apply. Para solucionarlo y limpiar el estado, se debe abortar el proceso actual:

git am --abort

Comandos para aplicar y gestionar parches

El siguiente bloque detalla el flujo de trabajo para verificar, aplicar y resolver conflictos al integrar parches:

# Verificar el contenido y las estadísticas del parche sin aplicarlo
git apply --stat feature-update.patch

# Comprobar si el parche se puede aplicar limpiamente (sin conflictos)
git apply --check feature-update.patch

# Aplicar el parche conservando los metadatos y añadiendo una firma de revisión (Signed-off-by)
git am --signoff feature-update.patch

# Aplicar múltiples parches desde un directorio en orden alfabético
git am ~/patches/feature-set/*.patch

# Continuar con la aplicación después de resolver conflictos manualmente y añadir los cambios al staging
git am --continue

Etiquetas: Git git-format-patch git-am git-apply patch-management

Publicado el 9-18 12:29