Git: volver a una confirmación anterior

    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.

     

    Etiquetas:

    Deja una respuesta

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