Deshaciendo accidental git stash pop


Escondí algunos cambios locales antes de hacer una fusión complicada, hice la fusión, luego estúpidamente olvidé confirmar antes de ejecutar git stash pop. El pop creó algunos problemas (llamadas a métodos incorrectos en una base de código grande) que están resultando difíciles de rastrear. Corrí git stash show, así que al menos sé qué archivos fueron cambiados. Si nada más, supongo que esta es una lección para comprometer más.

Mi pregunta: ¿es posible deshacer el pop de alijo sin deshacer también la fusión?

 156
Author: nren, 2011-07-01

3 answers

Intenta usar ¿Cómo recuperar un alijo caído en Git? para encontrar el alijo que sacaste. Creo que siempre hay dos confirmaciones para un stash, ya que preserva el índice y la copia de trabajo (por lo general, la confirmación del índice estará vacía). Luego git show para ver el diff y usar patch -R para no aplicarlos.

 59
Author: Ben Jackson,
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
2017-05-23 12:02:40

De git stash --help

Recovering stashes that were cleared/dropped erroneously
   If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
   following incantation to get a list of stashes that are still in your repository, but not reachable any more:

       git fsck --unreachable |
       grep commit | cut -d\  -f3 |
       xargs git log --merges --no-walk --grep=WIP

Esto me ayudó mejor que la respuesta aceptada con el mismo escenario.

 30
Author: kachar,
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-10-28 16:08:18

Si su fusión no fuera demasiado complicada otra opción sería:

  1. Mover todos los cambios incluyendo los cambios de fusión de nuevo a stash usando"git stash"
  2. Ejecute la fusión de nuevo y confirme sus cambios (sin los cambios del alijo caído)
  3. Ejecute un "git stash pop" que debería ignorar todos los cambios de su fusión anterior, ya que los archivos son idénticos ahora.

Después de eso, solo te quedan los cambios del alijo que dejaste caer también temprano.

 0
Author: markus,
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-01-31 16:20:52