tag remove commits all git rebase

git - remove - Recuperarse de omisiones inadvertidas durante la rebase



git squash all commits (1)

Solo traté de volver a establecer una base de una rama muy antigua con una pequeña modificación en mi maestro. Hubo un problema con la fusión de solo uno de los tres archivos involucrados, así que hice una pausa sin pensar, pensando que se saltaría ese archivo, pero dio la casualidad de que omitió todos mis cambios y rodó hacia adelante. Así que ahora la rebase ha terminado, y mis cambios parecen haber desaparecido.

He visto la pregunta acerca de cómo deshacer la rebase , pero todo es griego para mí, veo el reflog, pero no sé a qué commit se adjuntó la rama antes de la rebase.

En cualquier caso, realmente no necesito deshacer la rebase, solo quiero poder recuperar los cambios en los dos archivos. ¿Hay alguna forma de hacer esto correctamente? Si esto falla, tendré que restaurar la copia de seguridad de ayer de mi repositorio y seleccionar los bits a mano.


Primero, haz un tarball de tu carpeta de trabajo de git. Esto hace que sea más fácil probarlo varias veces.

Supongamos que sucedió lo siguiente

  • git checkout otra-vieja-sucursal
  • git rebase master
  • algunos problemas (que se salteó)

en este punto, usted todavía está en otra rama antigua y su reflog le muestra:

6f8348f HEAD@{0}: rebase: <commit message of last commit in another-old-branch> e547ec0 HEAD@{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0 65cedf8 HEAD@{2}: checkout: moving from master to another-old-branch

Imagine que las ramificaciones son como enlaces simbólicos (o punteros), todo lo que tenemos que hacer es dejar que la rama ''otra-vieja-rama'' vuelva a señalar en la vieja identificación de compromiso. el compromiso anterior todavía está allí, y no fue tocado por tu rebase. un poco: ''hey git, otra-vieja-rama es e547ec0d2, olvida todo lo demás que pasó''

En nuestro caso aquí fue e547ec0d2a558d189464fc57192066b34ec5f28f, entonces lo que tenemos que hacer ahora es

  • git checkout another-old-branch # si aún no estás allí
  • git reset --hard e547ec0d2a558d189464fc57192066b34ec5f28f

ahora tu rama ha vuelto a la normalidad. Y puedes volver a intentar tu rebase.

Tenga en cuenta que su reflog es ahora un poco más complicado que el ejemplo anterior. pero debería seguir ahí en alguna parte ...

¡buena suerte!