Revertir Merge Commit en Git

Abdul Jabbar 30 enero 2023
  1. Revertir el commit de Git que no se envía
  2. Revertir Git Commit que ya se envió
Revertir Merge Commit en Git

A veces, necesitamos fusionar dos o más ramas y luego enviar el commit a la rama deseada. Pero luego nos damos cuenta de que no necesitamos esa combinación en ese repositorio, por lo que la pregunta aquí es cómo deshacer o revertir un commit de fusión que ya se envió. Nada de que preocuparse. Git tiene una excelente solución para este problema que se analiza a continuación.

Hay dos formas de lidiar con esta situación dependiendo del problema; una es que aún no se ha enviado al repositorio, pero se ha confirmado. Otra es que se confirma y se envía a ambos al repositorio. ambas situaciones se analizan a continuación:

Revertir el commit de Git que no se envía

Es imposible revertir un commit en Git directamente. A pesar de esto, debemos verificar el compromiso antes de revertirlo. Después de revertirlo, ahora la posición del directorio de trabajo es la misma que la posición del directorio de trabajo antes de enviar el commit.

Ahora podemos aplicar el comando git reset para mover el puntero de índice a su lugar, es decir, la posición antes de el commit. Por ejemplo, si queremos mantener los cambios de los commits Commit1 y Commit3 pero revertir los cambios del commit Commit2, ejecuta este comando.

git reset HEAD~3

Este comando devolverá el puntero del índice a la posición anterior al commit Commit2. Después de revertir el commit, debemos agregar los archivos modificados al directorio de trabajo nuevamente. Por ejemplo, ejecute los siguientes comandos:

git checkout Commit1 
git add Commit1  
git checkout Commit3 
git add Commit3
git commit

Después de eso, podemos enviar los commits Commit1 y Commit3 al repositorio remoto.

git push

Si queremos fusionar dos ramas y luego revertir los cambios de una rama, podemos usar el siguiente comando:

git merge --abort

Este comando se utiliza para cancelar el proceso de fusión. Después de eso, podemos revertir los cambios a la rama. Los comandos discutidos en esta sección son útiles si queremos deshacer el efecto de el último commit o varias commits.

Sin embargo, si queremos deshacer el efecto de las últimas dos o más commits, debemos restablecer el directorio de trabajo al estado anterior a el último commit. Es porque es imposible revertir una o más commits directamente.

Revertir Git Commit que ya se envió

En el otro caso, si ya hemos enviado el commit de fusión a la rama remota y también la hemos enviado, tenemos que hacer un nuevo commit que revierta los cambios. Ejecutaremos el siguiente comando:

git revert -m 1 <merge-commit-hash>

Esto desarrollará un nuevo commit que revertirá los cambios de el commit de fusión anterior. Sin embargo, esta nueva confirmación también contendrá todos los cambios de el commit de combinación original, por lo que necesitaremos editar el mensaje de commit para indicar que se trata de un commit de reversión. Mientras que la opción que hemos mencionado, -m 1 le dirá a Git que queremos mantener la rama fusionada.

El comando revert no cambia el árbol de trabajo. Sólo modifica el índice. El comando revert también tiene una opción para restaurar el mensaje original de el commit. En el ejemplo anterior, la opción -m se usa para restaurar el mensaje original de el commit. El comando revert también se puede usar para restaurar un archivo específico del commit integrada.

Git revert es una herramienta útil para usar en nuestras ramas locales cuando vamos con un cambio y decidimos que ya no queremos mantener ese cambio. No se recomienda su uso en ramas públicas.

Como sabemos, git revert es puramente reversible, es imposible deshacer sus cambios. Si ejecutamos git revert en un commit que no es el commit actual en su rama, debemos tener mucho cuidado porque git revert desarrollará nuevos commits que tendrán nuevas ID de commit.

Si luego ejecutamos git reset –hard para revertir los cambios que realiza git revert, también eliminaremos los cambios realizados por el desarrollador que creó el commit que git revert deshacer. Es posible usar git revert en una rama pública, pero hacerlo no es una buena idea según mi opinión. Es mejor desarrollar una nueva rama para hacer un cambio y luego fusionarla con la rama master cuando hayamos terminado.

Si queremos usar git revert en una rama pública, asegúrese de que somos los únicos que trabajan en esa rama, o desharemos el trabajo de otros.

Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

Artículo relacionado - Git Revert

Artículo relacionado - Git Merge