En git, ¿cómo puedo crear un único parche para las últimas 2+ revisiones?


Me gustaría crear un parche para las últimas 2 revisiones.

git format-patch -2

Me da 2 archivos de parches, uno por cada revisión

git format-patch HEAD~2..HEAD

Da lo mismo.

git format-patch -1 HEAD~2..HEAD

Da un solo archivo, pero solo contiene cambios para la última revisión.

¿Hay alguna forma de hacer esto en git?

 43
Author: Matthew, 2010-02-07

4 answers

git diff HEAD~2..HEAD > my-patch.diff

Sin embargo, no tendrá ninguno de los metadatos per-commit de format-patch.

 47
Author: Tobu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-07 17:04:10

Use la opción st stdout y luego catérela a un archivo.

Así:

git format-patch HEAD~2..HEAD --stdout > changes.patch

Esto mantendrá los metadatos per-commit.

 39
Author: JC Brand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-17 08:15:13

Con Git 2.20 (Q4 2018) y más, ahora tienes:

  • git format-patch --interdiff.
  • git format-patch --rangediff.

Ambos están ayudando a explicar la diferencia entre esta versión y el intento anterior en la carta de presentación (o después de los guiones de árbol como un comentario).

format-patch: permitir --interdiff / --rangediff para aplicar a un parche solitario

Al enviar una versión revisada de un parche o serie, puede ser útil (para los revisores) incluir un resumen de los cambios intento anterior en la forma de un interdiff, por lo general en la carta de presentación.
Sin embargo, ocasionalmente es útil, a pesar de hacer una lectura ruidosa, insertar un interdiff o un rangediff en la sección de comentarios del parche solitario de una serie de 1 parche.

Véase commit ee6cbf7, commit 3fcc7a2, commit 3b02641, commit 5ac290f, commit 126facf, commit fa5b7ea (22 Jul 2018) por Eric Sunshine (sunshineco).
(Merged by Junio C Hamano -- gitster -- in commit 688cb1c, 17 Sep 2018)

Por lo tanto, extienda "git format-patch --interdiff=<prev>" para insertar un interdiff en la sección de comentarios de un parche solitario en lugar de requerir una carta de presentación.
El interdiff está indentado para evitar confundir git-am y a los lectores humanos para que lo consideren parte del parche propiamente dicho.

Véase commit 40ce416, commit 8631bf1, commit 4ee9968, commit 2e6fd71, commit 31e2617, commit 73a834e, commit 2566865, commit 87f1b2d (22 Jul 2018) por Eric Sunshine (sunshineco).
(Merged by Junio C Hamano -- gitster -- in commit 881c019 , 17 Sep 2018)

Por lo tanto, extienda "git format-patch --range-diff=<refspec>" para insertar un range-diff en la sección de comentarios de un parche solitario en lugar de requerir una carta de presentación.

 1
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-22 20:57:13

Podrías hacer algo como:

$ git checkout -b tmp
$ git reset HEAD~2
$ git commit -a

El commit a branch tmp será el mismo que los 2 commits individuales.

 0
Author: William Pursell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-07 17:19:06