Como simplesmente crio um patch a partir do meu último git commit?

186

Estou procurando o comando mágico de criar um patch a partir do último commit efetuado.

Às vezes, meu fluxo de trabalho se parece com isso

vi some.txt
git add some.txt
git commit -m "some change"

e agora eu só quero escrever

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

mas o que devo colocar lá em vez de create-patch-from-last-commit-to-file?

claj
fonte

Respostas:

297

Em geral,

git format-patch -n HEAD^

(verifique a ajuda para as várias opções), embora seja realmente para enviá-las. Para um único commit apenas

git show HEAD > some-patch0001.patch

lhe dará um patch utilizável.

Sem utilidade
fonte
18
tenha cuidado com "git show HEAD> some-patch0001.patch"; se é chamado em terminal colorido, os dups também colorem as seqüências de escape no arquivo.
Hrach
12
Você também pode usar git diff > change.patch. Você também pode incluir um intervalo de revisões e isso permite criar patches para alterações não confirmadas. A grande diferença, no entanto, é que ele não incluirá diferenças nos arquivos binários . Veja a resposta para Qual é a diferença entre 'git format-patch' e 'git diff'? para mais detalhes.
Rangi Keen
4
@hrach não no Linux, não é #
Robin Green
4
Não, porque não é isso que a primeira linha diz. Quer git format-patch -1ou git format-patch -n HEAD^deve funcionar.
Inútil
4
Obrigado, eu não tinha entendido que era literalmente a letra 'n', pensei que fosse um espaço reservado (o patch de formato possui as opções '-n' e '-' <n> ').
Etienne
60

Usando a resposta @Useless, você também pode usar o formulário geral sem parâmetros para o último commit e colocá-lo em um arquivo com:

git format-patch HEAD^ --stdout > patchfile.patch

Ou, sendo mais limpo para os usuários do Windows quando os pontos de intercalação precisam ser escapados, dobrando-os:

git format-patch HEAD~1 --stdout > patchfile.patch
a1an
fonte
2
Trabalhou para mim - obrigado. Se acontecer de você usar o Windows e Git, você tem que escapar da cenoura (eu sei hediondo): "git formato-patch CABEÇA ^^ --stdout> patchfile.patch"
Steve Midgley
3
Para evitar o problema do Windows de ter que escapar desse sinal de intercalação (o que faz com que pareça um comando git válido diferente), você pode usar a alternativa de git format-patch HEAD~1. Eu acho que isso acaba sendo menos confuso no Windows.
22716 Michael Burr
30

de outra maneira, se tiver o ID de confirmação desse commit específico, você poderá usar,

git format-patch -1 {commit-id}
Vijay C
fonte
9

Você precisa da -popção de git log:

git log -1 -p --pretty='%b'
Brandan
fonte
Use este se você não se importa com o e-mail de / date / assunto no início do arquivo.
Ryan H.
5
git format-patch -1

Faz o trabalho para mim.

Katu
fonte