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 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.
LinkedInArtículo relacionado - Git Revert
- Diferencia entre los comandos Git Reset, Revert y Checkout
- Git Revertir Confirmar Local
- Restaurar una confirmación de Git revertida
- Revertir un repositorio de Git a una confirmación anterior
- Eliminar commits locales en Git
- Revertir cambios locales al estado anterior en Git