Deshacer commits enviadas en Git con Reset y Revert

Ankit Raj Goyal 23 agosto 2022
  1. Deshacer commits empujadas con el comando git reset
  2. Deshacer commits empujadas con el comando git revert
  3. Deshacer commits empujadas con el comando git checkout
Deshacer commits enviadas en Git con Reset y Revert

Mostramos tres métodos para deshacer commits enviadas desde un repositorio remoto en Git. Usamos los comandos git reset, revert y checkout para esto.

Cuando usamos git reset, también eliminamos cualquier rastro de las commits no deseadas del historial del repositorio. Pero con git revert, tanto el compromiso original como el de deshacer permanecen en el historial.

Si usamos git checkout, deshacemos los cambios en una nueva rama.

Deshacer commits empujadas con el comando git reset

Creamos un repositorio undo_pushed_commits_local y lo llenamos con algunas commits saludables (buenas).

mkdir undo_pushed_commits_local
git init

Luego agregue/modifique archivos.

git add --all
git commit -m "Make healthy commit"

Agregar/modificar más archivos.

git add -all
git commit -m "Make another healthy commit"

Hacer compromisos saludables

Ahora enviaremos estas commits al repositorio undo-pushed-commits-remote en GitHub.

git remote add undo-remote git@github.com:danielturidandy/undo-pushed-commits-remote.git

git push undo-remote master

Crear alias para repositorio remoto

Enviar a repositorio remoto

Nuestro repositorio remoto ahora tiene dos commits.

El repositorio remoto tiene dos commits

Ahora, hagamos el commit malo.

echo "This is a bad addition" >> file1.txt
echo "This is a bad addition" >> file2.txt
git add -all
git commit -m "Make a bad commit"

Hacer un mal compromiso

Enviamos este compromiso al repositorio remoto.

git push undo-remote

Empuje la mala comisión

Nuestro control remoto tiene el compromiso incorrecto:

El control remoto tiene el compromiso incorrecto

Ahora restablecemos a la última confirmación buena en nuestro repositorio local. Usamos la opción --hard para eliminar cualquier rastro de las commits incorrectas del historial de commits.

git log
git reset --hard  <SHA of the last good commit>

Restablecer a la última confirmación válida

Hacemos push del repositorio local al remoto con la opción -f para forzar el push.

git push -f undo-remote

el commit incorrecta se elimina del repositorio remoto

Este método funciona mejor con repositorios privados o repositorios con equipos pequeños.

Los equipos grandes pueden enfrentar problemas si algunos desarrolladores llevan el control remoto a su entorno local después de enviar las commits incorrectas antes de que restablezcamos a un buen estado. No tienen un historial de commits con información de las commits incorrectas para corregir sus repositorios.

Deshacer commits empujadas con el comando git revert

Aquí hemos empujado cuatro compromisos incorrectos al repositorio remoto.

4 errores enviados al control remoto

Podemos usar revert para deshacer una soel commit incorrecta o un rango de commits incorrectas.

revert crea una nueva confirmación que revierte el commit no deseada. Tanto las commits originales como las invertidas permanecen en el historial del repositorio.

Deshacer una soel commit empujada con revert

git revert <SHA of the commit we want to revert>

Un nuevo compromiso que revierte el viejo mal compromiso

Ahora insertamos este cambio en el repositorio remoto. Recuerde usar el indicador -f para asegurarse de que no surjan conflictos.

git push -f undo-remote

Nuestro repositorio remoto ahora tiene la nueva confirmación que revierte la mael commit.

El nuevo Revert Commit en el repositorio remoto

Deshacer un rango de commits empujadas con revert

git revert <SHA of the oldest commit to revert>..<SHA of the newest commit to revert>

Revertir un rango de commits

Esto revertirá todas las commits en el rango proporcionado (sin incluir el commit más antigua, pero esto también puede depender de la versión/plataforma que utilice).

Las commits en el rango proporcionado se invierten con nuevas commits

Ahora empujamos los cambios al control remoto con el indicador -f.

git push -f undo-remote

El repositorio remoto tiene los compromisos de reversión

Este método es ideal para repositorios públicos con grandes equipos trabajando en ellos. Como tanto las commits incorrectas como las de deshacer permanecen en el historial, los desarrolladores pueden mantener sus repositorios locales actualizados con todas las inserciones/reversiones incorrectas.

Deshacer commits empujadas con el comando git checkout

Esta técnica es un truco rápido que bifurca una nueva rama sin las malas commits. Es ideal para bases de código pequeñas y si tiene poco tiempo.

Primero hacemos un checkout a la última confirmación buena.

git checkout <SHA of last known good commit>

Luego alcanzamos un estado HEAD separado en la última confirmación buena conocida en el historial del repositorio.

Aquí ahora bifurcamos una nueva rama de este estado.

git checkout -b branch_without_badcommits

Luego lo empujamos en el control remoto a una nueva rama.

git push -f undo-remote branch_without_badcommits

Cree y envíe una nueva rama sin las malas commits

El repositorio remoto ahora tiene una nueva rama sin ningun commit incorrecta.

El repositorio remoto tiene una nueva rama sin los malos compromisos

Artículo relacionado - Git Undo