¿Cómo puedo simplemente crear un parche desde mi último git commit?

186

Estoy buscando el comando mágico de crear un parche desde la última confirmación realizada.

Mi flujo de trabajo a veces se ve así

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

y ahora solo quiero escribir

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

pero, ¿qué debo poner allí en lugar de create-patch-from-last-commit-to-file?

claj
fuente

Respuestas:

297

En general,

git format-patch -n HEAD^

(consulte la ayuda para las muchas opciones), aunque en realidad es para enviarlas por correo. Para un solo compromiso solo

git show HEAD > some-patch0001.patch

te dará un parche utilizable.

Inútil
fuente
18
tenga cuidado con "git show HEAD> some-patch0001.patch", si se llama en un terminal de color, también duplica las secuencias de escape de color en el archivo.
hrach
12
También puedes usar git diff > change.patch. También puede incluir un rango de revisión y le permite crear parches para cambios no confirmados. La gran diferencia, sin embargo, es que no incluirá diferencias en los archivos binarios . Vea la respuesta a ¿Cuál es la diferencia entre 'git format-patch' y 'git diff'? para más detalles.
Rangi Keen
44
@hrach no está en Linux, no lo hace
Robin Green
44
No, porque eso no es lo que dice la primera línea. Cualquiera git format-patch -1o git format-patch -n HEAD^debería funcionar.
Inútil el
44
Gracias, no había entendido que era literalmente la letra 'n', pensé que era un marcador de posición (el formato-parche tiene las opciones '-n' y '- <n>').
Étienne
60

Tomando de @Useless answer, también puede usar el formulario general sin parámetros para la última confirmación y ponerlo en un archivo con:

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

O, para ser más limpios para los usuarios de Windows cuando hay que escapar de los cuidados, duplicándolos:

git format-patch HEAD~1 --stdout > patchfile.patch
a1an
fuente
2
Trabajó para mí, gracias. Si usa Windows y Git, debe escapar de la zanahoria (lo sé atroz): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley
3
Para evitar el problema de Windows de tener que escapar de ese cursor (que lo hace parecer un comando git válido diferente), puede usar la alternativa de git format-patch HEAD~1. Creo que eso termina siendo menos confuso en Windows.
Michael Burr
30

de otra manera, si tiene el id de confirmación de esa confirmación en particular, puede usar,

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

Necesita la -popción de git log:

git log -1 -p --pretty='%b'
Brandan
fuente
Use este si no le interesan las líneas de correo electrónico de / fecha / asunto al comienzo del archivo.
Ryan H.
5
git format-patch -1

Hace el trabajo para mí.

Katu
fuente