Git: volver a una confirmación anterior

G

Si he aprendido algo en mis más de 15 años de programación, es que los errores son comunes y cometo muchos de ellos. Esto también se aplica a las herramientas de control de versiones. Ya sea que realice cambios accidentalmente o simplemente se dé cuenta de que su código comprometido anterior no es lo que deseaba, a menudo tendrá que revertir una confirmación anterior en Git.

En este artículo, mostraré algunas formas de revertir sus confirmaciones, según su caso de uso. Este es un tema complicado (que es cierto para muchos temas de Git en general), así que asegúrese de seguir las instrucciones que mejor se adapten a sus necesidades.

Eliminar confirmaciones no publicadas

Si aún no ha publicado sus confirmaciones en un repositorio remoto, como GitHub, entonces básicamente puede eliminar las confirmaciones anteriores utilizando el reset mando.

Si bien esta es una solución efectiva, es peligrosa ya que está reescribiendo el historial y dejando las confirmaciones “eliminadas” sin referencia o “huérfanas”. La única forma de encontrar y recuperar estas confirmaciones sin referencia es con git reflog.

los reset El comando tiene tres opciones diferentes, dos de las cuales describiremos aquí:

$ git reset --hard <hash-or-ref>

Utilizando la --hard opción, todo se revierte a la confirmación especificada. Esto incluye los punteros de referencia del historial de confirmación, el índice de preparación y su directorio de trabajo.

Esto significa que al usar solo este comando, no solo volverá a una confirmación anterior, sino que perderá todos los cambios operativos en el proceso. Para evitar perder cualquier cambio de trabajo, puede utilizar el stash y stash pop comandos:

$ git stash
$ git reset --hard <hash-or-ref>
$ git stash pop

los stash comando guarda sus cambios de trabajo (sin ningún compromiso o cambio en el árbol), y luego stash pop los trae de vuelta.

La otra opción que puede considerar es la --soft opción. Esta opción funciona de la misma manera que git reset --hard <hash-or-ref>, pero solo afecta al historial de confirmaciones, no a su directorio de trabajo o índice de ensayo.

$ git reset --soft <hash-or-ref>

Entonces, si tiene cambios no confirmados que desea conservar, es probable que esta sea la opción que desee.

Eliminar confirmaciones publicadas

Entonces, digamos que comprometió su código y luego lo envió al repositorio remoto. En este punto, es muy recomendable que no haga usa algo como git reset ya que estarías reescribiendo la historia.

En cambio, el enfoque recomendado sería utilizar el revert mando. Este comando funciona deshaciendo los cambios que se realizaron en la confirmación especificada creando una nueva confirmación y no eliminando ninguna confirmación anterior. Esto es ideal para cambios publicados porque entonces se conserva el verdadero historial del repositorio. Aquí está el comando:

$ git revert <hash-or-ref>

Entonces, digamos que tiene un archivo de texto en su repositorio con el siguiente contenido:

This is my sample text

Y luego lo cambia a:

This is my awesome sample text

Su historial de confirmaciones podría verse así:

$ git log --pretty=oneline
676ec97a9cb2cebbb5c77904bbc61ced05b86f52 Added 'awesome' to text
735c5b43bf4b5b7107a9cc3f6614a3890e2889f6 Initial commit

Si decidimos que ya no queremos “impresionante” en nuestro texto, pero no queremos eliminar el 676ec cometer, podemos usar revert para deshacer ese cambio:

$ git revert 676ec
[master f68e546] Revert "Added 'awesome' to text"
 1 file changed, 1 insertion(+), 1 deletion(-)

Después de que se nos solicite que ingrese un mensaje de confirmación, ahora podemos ver en nuestro historial de confirmación que en realidad hay una nueva confirmación:

$ git log --pretty=oneline
f68e546ac2ae240f22b2676b5aec499aab27f1ca Revert "Added 'awesome' to text"
676ec97a9cb2cebbb5c77904bbc61ced05b86f52 Added 'awesome' to text
735c5b43bf4b5b7107a9cc3f6614a3890e2889f6 Initial commit

Como resultado de esto, la primera y la tercera confirmación representan exactamente el mismo estado del proyecto. La confirmación se ha revertido y no se perdió ningún historial.

Tenga en cuenta que hay bastantes otras formas de usar este comando, como si desea revertir 2 confirmaciones, puede usar:

$ git revert HEAD~2

O si desea revertir muchas confirmaciones no continuas, especifíquelas individualmente:

$ git revert 676ec 735c5

Consultar temporalmente un compromiso anterior

Al “revertir una confirmación”, puede querer decir que desea volver temporalmente a un estado anterior en su repositorio, pero sin realizar ningún cambio real en el árbol. En este caso, probablemente solo desee verificar el compromiso, lo que le permitirá volver al maestro o cualquier otro estado cuando haya terminado:

$ git checkout <hash-or-ref>

Esto cambiará su directorio de trabajo al contenido de esa confirmación, así como a la ubicación a la que apunta HEAD, ninguna de las cuales es irreversible. Cualquier cambio que realice aquí puede confirmarse en una rama o guardarse para su uso posterior.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad