Come posso semplicemente creare una patch dal mio ultimo commit git?


186

Sto cercando il comando magico di creare una patch dall'ultimo commit effettuato.

Il mio flusso di lavoro a volte assomiglia a questo

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

e ora voglio solo scrivere

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

ma cosa dovrei mettere lì invece di create-patch-from-last-commit-to-file?



Risposte:


297

In generale,

git format-patch -n HEAD^

(controlla la guida per le molte opzioni), anche se è davvero per spedirle. Solo per un singolo commit

git show HEAD > some-patch0001.patch

ti darà una patch utilizzabile.


18
fai attenzione con "git show HEAD> some-patch0001.patch", se viene chiamato in un terminale colorato duplica anche le sequenze di escape del colore nel file.
hrach,

12
Puoi anche usare git diff > change.patch. Puoi anche includere un intervallo di revisione e ti consente di creare patch per le modifiche senza commit. La grande differenza, tuttavia, è che non includerà differenze nei file binari . Vedi la risposta a Qual è la differenza tra 'git format-patch' e 'git diff'? per maggiori dettagli.
Rangi Keen,

4
@hrach non su Linux no
Robin Green

4
No, perché non è quello che dice la prima riga. Sia git format-patch -1o git format-patch -n HEAD^dovrebbe funzionare.
Inutile

4
Grazie, non avevo capito che era letteralmente la lettera 'n', pensavo fosse un segnaposto (format-patch ha entrambe le opzioni '-n' e '- <n>').
Étienne,

60

Prendendo dalla risposta @Useless, puoi anche utilizzare il modulo generale senza parametri per l'ultimo commit e inserirlo in un file con:

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

Oppure, essere più pulito per gli utenti di Windows quando è necessario sfuggire ai carrelli raddoppiandoli:

git format-patch HEAD~1 --stdout > patchfile.patch

2
Ha funzionato per me - grazie. Se ti capita di usare Windows e Git, devi scappare dalla carota (lo so atroce): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley,

3
Per evitare il problema di Windows di dover sfuggire a quel cursore (che lo fa sembrare un diverso comando git valido), puoi usare l'alternativa di git format-patch HEAD~1. Penso che finisca per essere meno confuso su Windows.
Michael Burr,

30

in un altro modo, se hai l'ID commit di quel particolare commit, puoi usare,

git format-patch -1 {commit-id}

9

È necessaria l' -popzione per accedere a log:

git log -1 -p --pretty='%b'

Usa questo se non ti interessa l'e-mail da / date / righe all'inizio del file.
Ryan H.

5
git format-patch -1

Fa il lavoro per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.