git format-patch
Transformer des commits en fichiers patch prêts à envoyer par e-mail
La commande 'git format-patch' écrit chaque commit d’une plage dans son propre fichier .patch numéroté : l’auteur, la date, le message du commit comme sujet et corps de l’e-mail, un résumé des modifications et le diff. Les projets qui relisent par liste de diffusion (comme Git lui-même et le noyau Linux) reçoivent les contributions ainsi, et git am retransforme les fichiers en commits.
Synopsis
git format-patch [-o <dir>] [--stdout] [-<n>] [<since> | <revision-range>]Options
Choisir la bonne option
Façons de transmettre des commits
En gardant auteur et message
| Commande | Garde l’auteur |
|---|---|
git diff > change.diff | No |
git format-patch + git am | Oui |
git bundle | Oui (commits et branches entiers) |
Exemples
Commits depuis main
git format-patch mainUn fichier par commit absent de main.
Le dernier commit
git format-patch -1Seulement le commit le plus récent.
Dans un dossier
git format-patch main -o patchesÉcrire les fichiers dans patches/.
Avec une lettre de présentation
git format-patch --cover-letter mainAjouter un e-mail d’introduction 0000.
Exemples de workflows
git format-patch main -o outgoingUn fichier par commit
git send-email outgoing/*.patchLes envoyer à la liste
Dépannage
Aucun fichier patch créé
Cause : La plage est vide (p. ex. votre branche n’a aucun commit au-delà de main)
Vérifiez avec git log --oneline main..HEAD
Astuces et pièges
Bonnes pratiques
- ✓Faites un rebase sur le dernier main avant de créer les patchs.
- ✓Un seul changement logique par commit — chacun devient un e-mail.
Erreurs fréquentes
- ✗Envoyer un git diff au lieu de format-patch — un diff perd l’auteur, la date et le message.
- ✗Oublier la plage et n’obtenir rien : format-patch a besoin d’un point de départ (main, -1…).
FAQ
Oui, mais git apply ne change que les fichiers ; git am crée aussi le commit avec l’auteur et le message d’origine.