Diferencia entre git stash pop y git stash apply


He estado usando git stash pop durante bastante tiempo. Recientemente me enteré del comando git stash apply. Cuando lo probé, parecía funcionar igual que git stash pop.

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

 627
Author: User 00000, 2013-03-08

4 answers

git stash pop arroja el alijo (superior, por defecto) después de aplicarlo, mientras que git stash apply lo deja en la lista de alijos para su posible reutilización posterior (o puede entonces git stash drop).

Esto sucede a menos que haya conflictos después de git stash pop, en este caso, no eliminará el alijo, comportándose exactamente como git stash apply.

Otra forma de verlo: git stash pop es git stash apply && git stash drop.

 983
Author: John Zwinck,
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-04-12 05:13:47

Tiene este enlace útil que indica la diferencia, como John Zwinck ha declarado y un inconveniente de Git stash pop.

Por ejemplo, digamos que los cambios guardados entran en conflicto con otros cambios que hayas realizado desde que creaste el alijo por primera vez. Tanto pop como apply activarán el modo de resolución de conflictos de merge, lo que te permitirá resolver estos conflictos muy bien... y ninguno de los dos se deshará del alijo, aunque quizás estés esperando que pop lo haga. Ya que mucha gente espera escondites para ser una pila simple, esto a menudo los lleva a hacer estallar el mismo alijo accidentalmente más tarde porque pensaron que se había ido.

Enlace http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful /

 65
Author: briankip,
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
2013-09-23 20:42:29

git stash pop aplica el elemento top stashed y lo elimina de la pila. git stash apply hace lo mismo, pero lo deja en la pila de alijos.

 40
Author: jchapa,
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
2013-03-08 03:16:25

Verlo en acción podría ayudarte a entender mejor la diferencia.

Suponiendo que estamos trabajando en la rama master y tenemos un archivo hello.txt que contiene la cadena "Hello".

Vamos a modificar el archivo y agregarle la cadena "world". Ahora desea moverse a una rama diferente para corregir un error menor que acaba de encontrar, por lo que necesita stash sus cambios:

git stash

Se movió a la otra rama, se corrigió el error y ahora está listo para continuar trabajando en su rama master, por lo que usted pop los cambios:

git stash pop

Ahora, si intentas revisar el contenido del alijo, obtendrás:

$ git stash show -p
No stash found.

Sin embargo, si usas git stash apply en su lugar, obtendrás el contenido guardado, pero también lo conservarás:

$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world

Así que pop es igual que el pop de stack: en realidad elimina el elemento una vez que se abre, mientras que applyes más como peek.

 18
Author: Maroun,
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
2016-11-30 12:27:06