Saltar al contenido

¿Cómo revierto un repositorio de Git a una confirmación anterior?

Te doy la bienvenida a nuestra página web, en este lugar encontrarás la resolución a lo que necesitas.

Solución:

Esto depende mucho de lo que entiendas por “revertir”.

Cambiar temporalmente a una confirmación diferente

Si desea volver temporalmente a él, perder el tiempo y luego volver a donde está, todo lo que tiene que hacer es verificar el compromiso deseado:

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

O si desea realizar confirmaciones mientras está allí, continúe y cree una nueva rama mientras lo hace:

git checkout -b old-state 0d1d7fc32

Para volver a donde estabas, solo revisa la sucursal en la que estabas nuevamente. (Si ha realizado cambios, como siempre al cambiar de rama, tendrá que manejarlos según corresponda. Puede reiniciar para desecharlos; puede ocultar, pagar, ocultar para llevárselos con usted; puede comprometerse llévelos a una sucursal allí si quiere una sucursal allí).

Eliminación definitiva de confirmaciones no publicadas

Si, por el contrario, realmente quieres deshacerte de todo lo que has hecho desde entonces, hay dos posibilidades. Primero, si no ha publicado ninguna de estas confirmaciones, simplemente reinicie:

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

Si te equivocas, ya has descartado los cambios locales, pero al menos puedes volver a donde estabas antes reiniciando de nuevo.

Deshacer confirmaciones publicadas con nuevas confirmaciones

Por otro lado, si ha publicado el trabajo, probablemente no quiera restablecer la rama, ya que eso es reescribir la historia. En ese caso, podría revertir las confirmaciones. Con Git, revertir tiene un significado muy específico: crear una confirmación con el parche inverso para cancelarlo. De esta manera no reescribes ninguna historia.

# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash):
git revert 0d1d7fc..a867b4a

# Reverting a merge commit
git revert -m 1 

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

los git-revert manpage en realidad cubre mucho de esto en su descripción. Otro enlace útil es esta sección de git-scm.com que trata sobre git-revert.

Si decide que no desea revertir después de todo, puede revertir la reversión (como se describe aquí) o restablecer antes de la reversión (consulte la sección anterior).

También puede encontrar útil esta respuesta en este caso:
¿Cómo puedo mover HEAD a una ubicación anterior? (Cabeza separada) y Deshacer confirmaciones

Muchas respuestas complicadas y peligrosas aquí, pero en realidad es fácil:

git revert --no-commit 0766c053..HEAD
git commit

Esto revertirá todo, desde HEAD hasta el hash de confirmación, lo que significa que recreará ese estado de confirmación en el árbol de trabajo. como si cada compromiso después 0766c053 había sido caminado de regreso. Luego puede confirmar el árbol actual, y creará una nueva confirmación esencialmente equivalente a la confirmación a la que “revirtió”.

(Los --no-commit flag permite que git revierta todas las confirmaciones a la vez; de lo contrario, se le solicitará un mensaje para cada confirmación en el rango, llenando su historial con nuevas confirmaciones innecesarias).

Esto es un manera segura y fácil de revertir a un estado anterior. No se destruye ningún historial, por lo que se puede utilizar para confirmaciones que ya se han hecho públicas.

¿Codificador rebelde?

¿Trabajas por tu cuenta y solo quieres que funcione? Siga estas instrucciones a continuación, han funcionado de manera confiable para mí y para muchos otros durante años.

¿Trabajando con otros? Git es complicado. Lea los comentarios debajo de esta respuesta antes de hacer algo precipitado.

Reversión de la copia de trabajo a la confirmación más reciente

Para volver a una confirmación anterior, ignorando cualquier cambio:

git reset --hard HEAD

donde HEAD es la última confirmación en tu rama actual

Revertir la copia de trabajo a una confirmación anterior

Para volver a una confirmación anterior a la confirmación más reciente:

# Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced 

# Moves pointer back to previous HEAD
git reset --soft [email protected]1

git commit -m "Revert to 56e05fced"

# Updates working copy to reflect the new commit
git reset --hard

Los créditos van a una pregunta similar de desbordamiento de pila, ¿Volver a una confirmación por un hash SHA en Git?.

Eres capaz de añadir valor a nuestro contenido informacional aportando tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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