2012-02-22 6 views
158

Estoy buscando el comando mágico de crear un parche a partir del último commit realizado.¿Cómo simplemente creo un parche de mi último compromiso de git?

Mi flujo de trabajo a veces se parece a esto

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

y ahora sólo quiero escribir

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

pero lo que debo poner allí en vez de create-patch-from-last-commit-to-file?

+0

posible duplicado de [Generar un parche git para un compromiso específico] (http://stackoverflow.com/questions/6658313/generate-a-git-patch-for-a-specific-commit) – manojlds

+1

Una buena fuente: https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ –

Respuesta

258

En general,

git format-patch -n HEAD^ 

(consultar la ayuda de las muchas opciones), aunque es realmente para enviarlos por correo. Para un solo comprometen simplemente

git show HEAD > some-patch0001.patch 

le dará un parche utilizable.

+0

este es más corto, lo cual es bueno. git show HEAD> SOME-PATCH0001.patch resolvería mi problema, ¡gracias! – claj

+14

tenga cuidado con "git show HEAD> some-patch0001.patch", si se llama en el terminal de color duplica también las secuencias de escape de color en el archivo. – hrach

+11

También puede 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 _it no incluirá diferencias en los archivos binarios_. Consulte la respuesta a [¿Cuál es la diferencia entre 'git format-patch' y 'git diff'?] (Http://stackoverflow.com/a/4624292/2506021) para obtener más detalles. –

7

Usted necesita la opción -p a git log:

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

Utilice este si no le importan las líneas de correo/fecha/asunto al comienzo del archivo. –

47

Tomando de respuesta @Useless, también se puede utilizar la forma general sin parámetros para la última confirmación y ponerlo en un archivo con:

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

O, siendo más limpio para los usuarios de windows cuando tienen signos de intercalación que se escaparon con la duplicación de ellas:

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

Funcionó para mí, gracias. Si usa Windows y Git, tiene que escapar de la zanahoria (lo sé atroz): "git format-patch HEAD ^^ --stdout> patchfile.patch" –

+0

Para evitar el problema de Windows de tener que escapar de ese símbolo (lo que hace que parezca un comando de git válido diferente), puede usar la alternativa de 'git format-patch HEAD ~ 1'. Creo que termina siendo menos confuso en Windows. –

23

otra manera, si tiene el id de cometer ese particular cometió, puede utilizar,

git format-patch -1 {commit-id} 
2
git format-patch -1 

hace el trabajo para mí.

Cuestiones relacionadas