git format-patch

Patches e reescrita

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>]
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (2)

Grava os arquivos de patch nesta pasta.

RecomendadoManter os patches fora da raiz do projeto

Exemplo

git format-patch -1 -o patches

Imprime todos os patches no terminal em vez de gravar arquivos.

Quando necessárioMandar os patches para outro programa ou um único arquivo

Exemplo

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

Intermediário (1)

Grava também 0000-cover-letter.patch, um e-mail de apresentação da série.

Quando necessárioApresentar uma série de vários patches

Exemplo

git format-patch --cover-letter main

Escolhendo a opção certa

Formas de entregar commits

Mantendo autor e mensagem

ComandoMantém a autoria
git diff > change.diffNo
git format-patch + git amSim
git bundleSim (commits e branches inteiros)

Exemplos

Commits desde main

git format-patch main

Um arquivo por commit que não está em main.


O último commit

git format-patch -1

Só o commit mais recente.


Numa pasta

git format-patch main -o patches

Grava os arquivos em patches/.


Com carta de apresentação

git format-patch --cover-letter main

Adiciona um e-mail de introdução 0000.

Exemplos de fluxos de trabalho

1
git format-patch main -o outgoing

Um arquivo por commit

2
git send-email outgoing/*.patch

Enviá-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

A:

Sim, mas git apply só altera arquivos; git am também cria o commit com o autor e a mensagem originais.