git format-patch

Patchs et réécriture

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>]
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (2)

Écrire les fichiers patch dans ce dossier.

RecommandéGarder les fichiers patch hors de la racine du projet

Exemple

git format-patch -1 -o patches

Afficher tous les patchs dans le terminal au lieu d’écrire des fichiers.

Si nécessaireEnvoyer les patchs vers un autre programme ou un seul fichier

Exemple

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

Intermédiaire (1)

Écrire aussi 0000-cover-letter.patch, un e-mail de présentation de la série.

Si nécessairePrésenter une série de plusieurs patchs

Exemple

git format-patch --cover-letter main

Choisir la bonne option

Façons de transmettre des commits

En gardant auteur et message

CommandeGarde l’auteur
git diff > change.diffNo
git format-patch + git amOui
git bundleOui (commits et branches entiers)

Exemples

Commits depuis main

git format-patch main

Un fichier par commit absent de main.


Le dernier commit

git format-patch -1

Seulement 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 main

Ajouter un e-mail d’introduction 0000.

Exemples de workflows

1
git format-patch main -o outgoing

Un fichier par commit

2
git send-email outgoing/*.patch

Les 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

A:

Oui, mais git apply ne change que les fichiers ; git am crée aussi le commit avec l’auteur et le message d’origine.