Necesito escribir un script que cree parches para una lista de números de confirmación SHA1.
Intenté usar git format-patch <the SHA1>
, pero eso generó un parche para cada confirmación 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?
git apply --stat file.patch
# mostrar estadísticas.git apply --check file.patch
# verifique el error antes de aplicar.git am < file.patch
# aplicar el parche finalmente.git am --keep-cr < mypatch.patch
git am -3 < file.patch
para aplicar usando una combinación de tres vías que le permitirá resolver conflictos usandogit mergetool
después (o editando manualmente) que se encuentran aquí .git format-patch -1 <sha> path/to/file.js
Esto creará un parche que solo contenga los diffs para el archivo .jsPara generar los parches desde los commits superiores desde un hash sha1 específico:
Los últimos 10 parches de la cabeza en un solo archivo de parche:
fuente
git format-patch -1 HEAD
generará parche para la confirmación más reciente-2
genera parches para los 2 commits más recientes es, y una cosa más para aclarar es que el comandogot format-patch -2 HEAD
es el mismo que la líneagit format-patch HEAD~2
Digamos que tiene commit id 2 después de commit 1 que podría ejecutar:
donde 2 y 1 son hash SHA.
fuente
git diff hash^ hash
. el "hash ^" da el commit precedido. (pero, por supuesto, la respuesta de manojlds es mejor)git show HEAD > mypatch.diff
mientras estás en el commit debería hacer lo mismo.git diff 1 2
Este comando (como ya sugirió @ Naftuli Tzvi Kay ):
Reemplace
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 UNIX.
Luego, puede volver a aplicar el archivo de parche en un formato de buzón:
Ver:
man git-format-patch
.fuente
git
parche con formato, al menos si el usuario lo aplica de la manera correcta.-k
bandera (git am -3
) me arregló este formulario (sinPATCH[0/10]
mensajes de confirmación). Git versión 2.20.1.windows.1Solución rápida y simple.
fuente
git apply --check patch-file-name
antes de aplicar un parche. Esto ayudará a evitar problemas.Si desea asegurarse de que el parche (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
Ver commit bb52995 , commit 3de6651 , commit fa2ab86 , commit ded2c09 (26 de abril de 2016) por Xiaolong Ye (``) .
(Fusionada por Junio C Hamano -
gitster
- en commit 72ce3ff , 23 de mayo de 2016)Git 2.23 (Q3 2019) mejorará eso, porque la "
--base
" opción de "format-patch
" calculó lospatch-ids
parches de requisitos previos de una manera inestable, que se ha actualizado para calcular de una manera que sea compatible con "git patch-id --stable
".Ver commit a8f6855 , commit 6f93d26 (26 abr 2019) por Stephen Boyd (
akshayka
) .(Fusionada por Junio C Hamano -
gitster
- en commit 8202d12 , 13 jun 2019)Antes de Git 2.24 (Q4 2019), "
git format-patch -o <outdir>
" hizo un equivalente de "mkdir <outdir>
" no "mkdir -p <outdir>
", que se está corrigiendo.Ver commit edefc31 (11 oct 2019) por Bert Wesarg (
bertwesarg
) .(Fusionada por Junio C Hamano -
gitster
- en commit f1afbb0 , 18 oct 2019)Con Git 2.25 (Q1 2020), "
git rebase
" no funcionó bien cuando seformat.useAutoBase
configuró la variable de configuración, que se ha corregido.Ver commit cae0bc0 , commit 945dc55 , commit 700e006 , commit a749d01 , commit 0c47e06 (04 dic 2019) por Denton Liu (
Denton-L
) .(Fusionada por Junio C Hamano -
gitster
- en commit 71a7de7 , 16 dic 2019)fuente
Para generar la ruta desde una confirmación específica (no la última confirmación):
fuente
si solo desea diff el archivo especificado, puede:
fuente
Con mi fondo mercurial iba a usar:
Pero estoy considerando usar
git format-patch -1 $ID
ahora.fuente
¿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: Reemplace
commitID
con la identificación de confirmación real (código de confirmación SHA1).fuente