¿Cuál es la diferencia entre git am y git apply?


Tanto git am como git apply se pueden usar para aplicar parches. No veo la diferencia. Ahora veo una diferencia: git am confirma automáticamente mientras que git apply solo toca los archivos pero no crea una confirmación. ¿Es esa la única diferencia?

 100
Author: Braiam, 2012-09-03

3 answers

Tanto la entrada como la salida son diferentes:

  • git apply toma un parche (por ejemplo, la salida de git diff) y lo aplica al directorio de trabajo (o índice, si se usa --index o --cached).
  • git am toma un buzón de confirmaciones formateadas como mensajes de correo electrónico (por ejemplo, la salida de git format-patch) y los aplica a la rama actual.

git am usa git apply detrás de las escenas , pero hace más trabajo antes (leyendo un Maildir o mbox, y analizar los mensajes de correo electrónico) y después (crear confirmaciones).

 92
Author: georgebrock,
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-06-26 14:14:50

git apply es para aplicar diffs rectos (por ejemplo, desde git diff) mientras que git am es para aplicar parches y secuencias de parches de correos electrónicos, ya sea en formato mbox o Maildir y es el "opuesto" de git format-patch. git am intenta extraer los mensajes de confirmación y los detalles del autor de los mensajes de correo electrónico, por lo que puede realizar confirmaciones.

 13
Author: CB Bailey,
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-09-02 22:21:01

Con git am se aplica el parche por lo que si utiliza git status no verá ningún cambio local.

git apply le permite hacer los cambios en los archivos de origen como si estuviera escribiendo el código por sí mismo, en consecuencia git status y git diff generarán los cambios realizados en el parche que ha aplicado, luego puede corregir/agregar más cambios y enviarlos juntos como un nuevo parche.

 8
Author: 0x90,
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
2014-12-26 16:26:25