in

¿Cómo revertir múltiples confirmaciones de git?

apple touch icon@2

Ampliando lo que escribí en un comentario.

La regla general es que no debe reescribir (cambiar) el historial que ha publicado, porque alguien podría haber basado su trabajo en él. Si reescribe (cambia) el historial, tendrá problemas para fusionar sus cambios y actualizarlos.

Entonces la solución es crear un nuevo compromiso cuales revierte los cambios del que quieres deshacerte. Puedes hacer esto usando git revert mando.

Tienes la siguiente situación:

A <-- B  <-- C <-- D                                  <-- master <-- HEAD

(las flechas aquí se refieren a la dirección del puntero: la referencia «padre» en el caso de las confirmaciones, la confirmación superior en el caso de la rama head (branch ref) y el nombre de la rama en el caso de la referencia HEAD).

Lo que necesita crear es lo siguiente:

A <-- B  <-- C <-- D <-- [(BCD)-1]                   <-- master <-- HEAD

dónde [(BCD)^-1] significa la confirmación que revierte los cambios en las confirmaciones B, C, D. Las matemáticas nos dicen que (BCD)-1 = D-1 C-1 B-1, para que pueda obtener la situación requerida utilizando los siguientes comandos:

$ git revert --no-commit D
$ git revert --no-commit C
$ git revert --no-commit B
$ git commit -m "the commit message for all of them"

Funciona para todo excepto para las confirmaciones de fusión.


La solución alternativa sería verificar contenido de commit A, y confirme este estado. También funciona con merge commits. Sin embargo, los archivos agregados no se eliminarán. Si tiene algún cambio local git stash ellos primero:

$ git checkout -f A -- . # checkout that revision over the top of local files
$ git commit -a

Entonces tendrías la siguiente situación:

A <-- B  <-- C <-- D <-- A'                       <-- master <-- HEAD

La confirmación A ‘tiene el mismo contenido que la confirmación A, pero es una confirmación diferente (mensaje de confirmación, padres, fecha de confirmación).


La solución alternativa de Jeff Ferland, modificada por Charles Bailey se basa en la misma idea, pero utiliza git restablecer. Aquí está ligeramente modificado, de esta manera FUNCIONA PARA TODO:

$ git reset --hard A
$ git reset --soft D # (or ORIG_HEAD or @{1} [previous location of HEAD]), all of which are D
$ git commit

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

60 156531 1514381552

¿Qué es el operador «no en» en Python?

LYP9tXeLcda8HVKgSSg5GZ 1200 80

La temporada 3 de Sex Education muestra cómo mantener frescos los tropos del drama adolescente