git format-patch

Parches y reescritura

Convertir commits en archivos de parche listos para correo


El comando 'git format-patch' escribe cada commit de un rango en su propio archivo .patch numerado: el autor, la fecha, el mensaje del commit como asunto y cuerpo del correo, un resumen de cambios y el diff. Los proyectos que revisan por lista de correo (como Git y el kernel de Linux) reciben así las contribuciones, y git am vuelve a convertir los archivos en commits.

Sinopsis

git format-patch [-o <dir>] [--stdout] [-<n>] [<since> | <revision-range>]
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Opciones

Haz clic en una opción para desplegarla

Principiante (2)

Escribe los archivos de parche en esta carpeta.

RecomendadoMantener los parches fuera de la raíz del proyecto

Ejemplo

git format-patch -1 -o patches

Imprime todos los parches en la terminal en lugar de escribir archivos.

Cuando haga faltaEnviar los parches a otro programa o a un solo archivo

Ejemplo

git format-patch --stdout main > series.mbox

Intermedio (1)

Escribe también 0000-cover-letter.patch, un correo de introducción de la serie.

Cuando haga faltaPresentar una serie de varios parches

Ejemplo

git format-patch --cover-letter main

Elegir la opción adecuada

Formas de entregar commits

Conservando autor y mensaje

ComandoConserva la autoría
git diff > change.diffNo
git format-patch + git amSí
git bundleSí (commits y ramas completos)

Ejemplos

Commits desde main

git format-patch main

Un archivo por cada commit que no está en main.


El último commit

git format-patch -1

Solo el commit más reciente.


En una carpeta

git format-patch main -o patches

Escribe los archivos en patches/.


Con carta de presentación

git format-patch --cover-letter main

Añade un correo de introducción 0000.

Ejemplos de flujos de trabajo

1
git format-patch main -o outgoing

Un archivo por commit

2
git send-email outgoing/*.patch

Enviarlos a la lista

Solución de problemas

No se creó ningún archivo de parche

Causa: El rango está vacío (p. ej. tu rama no tiene commits más allá de main)

Compruébalo con git log --oneline main..HEAD

Consejos y trampas

Buenas prácticas

  • ✓Haz rebase sobre el main más reciente antes de crear parches.
  • ✓Un cambio lógico por commit — cada uno se convierte en un correo.

Errores comunes

  • ✗Enviar un git diff en lugar de format-patch — un diff pierde el autor, la fecha y el mensaje.
  • ✗Olvidar el rango y no obtener nada: format-patch necesita un punto de partida (main, -1…).

Preguntas frecuentes

A:

Sí, pero git apply solo cambia archivos; git am además crea el commit con el autor y el mensaje originales.