git format-patch
Transformar commits em arquivos de patch prontos para e-mail
O comando 'git format-patch' grava cada commit de um intervalo no seu próprio arquivo .patch numerado: o autor, a data, a mensagem do commit como assunto e corpo do e-mail, um resumo das alterações e o diff. Projetos que revisam por lista de e-mails (como o próprio Git e o kernel Linux) recebem contribuições assim, e git am transforma os arquivos de volta em commits.
Sinopse
git format-patch [-o <dir>] [--stdout] [-<n>] [<since> | <revision-range>]Opções
Escolhendo a opção certa
Formas de entregar commits
Mantendo autor e mensagem
| Comando | Mantém a autoria |
|---|---|
git diff > change.diff | No |
git format-patch + git am | Sim |
git bundle | Sim (commits e branches inteiros) |
Exemplos
Commits desde main
git format-patch mainUm arquivo por commit que não está em main.
O último commit
git format-patch -1Só o commit mais recente.
Numa pasta
git format-patch main -o patchesGrava os arquivos em patches/.
Com carta de apresentação
git format-patch --cover-letter mainAdiciona um e-mail de introdução 0000.
Exemplos de fluxos de trabalho
git format-patch main -o outgoingUm arquivo por commit
git send-email outgoing/*.patchEnviá-los para a lista
Solução de problemas
Nenhum arquivo de patch criado
Causa: O intervalo está vazio (p. ex. seu branch não tem commits além de main)
Confira com git log --oneline main..HEAD
Dicas e armadilhas
Boas práticas
- ✓Faça rebase no main mais recente antes de gerar os patches.
- ✓Uma alteração lógica por commit — cada uma vira um e-mail.
Erros comuns
- ✗Enviar um git diff em vez de format-patch — um diff perde o autor, a data e a mensagem.
- ✗Esquecer o intervalo e não obter nada: format-patch precisa de um ponto de partida (main, -1…).
Perguntas frequentes
Sim, mas git apply só altera arquivos; git am também cria o commit com o autor e a mensagem originais.