Pregunta Genera un parche git para un compromiso específico


Necesito escribir un script que cree parches para una lista de números de confirmación de SHA1.

Intenté usar git format-patch <the SHA1>, pero eso generó un parche para cada compromiso desde ese SHA1. Después de generar unos cientos de parches, tuve que matar el proceso.

¿Hay alguna manera de generar un parche solo para el SHA1 específico?


945
2017-07-12 00:35


origen


Respuestas:


Tratar:

git formato-parche -1 <sha>

o

git format-patch -1 HEAD

Aplicar el parche con el comando:

git am < file.patch

1539
2017-07-12 00:43



Para generar los parches de los commits más altos de un hash sha1 específico:

git format-patch -<n> <SHA1>

Los últimos 10 parches desde la cabeza en un solo archivo de parche:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

234
2018-04-23 14:34



Supongamos que ha confirmado la id. 2 después de la confirmación 1 que podría ejecutar:

git diff 2 1 > mypatch.diff

donde 2 y 1 son hash SHA.


61
2017-07-12 00:42



Este comando (como ya fue sugerido por @Naftuli Tzvi Kay)

git format-patch -1 HEAD

Reemplazar HEAD con hash o rango específico.

generará el archivo de parche para la última confirmación formateada para parecerse al formato de buzón de UNIX.

-<n> - Preparar parches desde los commits superiores.

Luego puede volver a aplicar el archivo de parche en formato de buzón de la siguiente manera:

git am -3k 001*.patch

Ver: man git-format-patch.


50
2017-07-06 13:52



git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

Solución rápida y simple.


17
2018-05-04 16:52



Para generar ruta desde una confirmación específica (no la última confirmación):

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

5
2018-05-24 07:26



Si quiere asegurarse de que el parche (de confirmación única) se aplicará sobre una confirmación específica, puede usar la nueva opción git 2.9 (junio de 2016) git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

Ver cometer bb52995, cometer 3de6651, cometer fa2ab86, commit ded2c09 (26 de abril de 2016) por Xiaolong Ye (``).
(Fusionado por Junio ​​C Hamano - gitster - en cometer 72ce3ff, 23 de mayo de 2016) 

format-patch: agregar '--base'opción para registrar la información del árbol base

Los encargados de la actualización o probadores externos pueden desear conocer el árbol base exacto   la serie de parches se aplica a. Enseñar a git formato-parche a '--base' opción   para registrar la información del árbol base y anexarla al final de la primera   mensaje (ya sea la carta de presentación o el primer parche de la serie).

La información del árbol base consiste en la "confirmación básica", que es una conocida   compromiso que es parte de la parte estable de la historia del proyecto de todo el mundo   de lo contrario funciona sin, y cero o más "parches de requisitos previos", que son   parches bien conocidos en vuelo que todavía no forman parte de la "comisión básica"   que deben aplicarse sobre la "confirmación básica" en orden topológico   antes de que los parches se puedan aplicar

La "confirmación básica" se muestra como "base-commit: "seguido por el 40-hex de   el nombre del objeto de commit.
  Se muestra un "parche de requisito previo" como "prerequisite-patch-id: "seguido por el identificador de parche de 40 hex", que se puede obtener pasando el parche a través del "git patch-id --stable"comando".


5
2018-06-01 06:29



si solo desea diferenciar el archivo especificado, puede:

git diff master 766eceb - connections /> 000-mysql-connector.patch


1
2018-01-17 09:40



¿Cuál es la forma de generar un parche solo para el SHA1 específico?

Es bastante simple:

Opción 1. git show commitID > myFile.patch

Opcion 2. git commitID~1..commitID > myFile.patch

Nota: reemplazar commitIDcon la identificación de confirmación real (código de confirmación SHA1).


0