git format-patch
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>]Opciones
Elegir la opción adecuada
Formas de entregar commits
Conservando autor y mensaje
| Comando | Conserva la autoría |
|---|---|
git diff > change.diff | No |
git format-patch + git am | Sí |
git bundle | Sí (commits y ramas completos) |
Ejemplos
Commits desde main
git format-patch mainUn archivo por cada commit que no está en main.
El último commit
git format-patch -1Solo el commit más reciente.
En una carpeta
git format-patch main -o patchesEscribe los archivos en patches/.
Con carta de presentación
git format-patch --cover-letter mainAñade un correo de introducción 0000.
Ejemplos de flujos de trabajo
git format-patch main -o outgoingUn archivo por commit
git send-email outgoing/*.patchEnviarlos 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
Sí, pero git apply solo cambia archivos; git am además crea el commit con el autor y el mensaje originales.