Pregunta ¿Volver a una confirmación mediante un hash SHA en Git? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

No tengo claro cómo git revert trabajos. Por ejemplo, quiero volver a cometer seis commits detrás de la cabeza, revertir todos los cambios en los intermedios commits en el medio.

Decir su SHA tiene su 56e05fced214c44a37759efa2dfc25a65d8ae98d. Entonces, ¿por qué no puedo hacer algo como esto?

git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d

508
2017-12-12 23:34


origen


Respuestas:


Si desea confirmar el HEAD actual con el estado exacto en una confirmación diferente, deshacer todas las confirmaciones intermedias, entonces puede usar reset para crear el estado correcto del índice para hacer la confirmación.

# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced

# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

982
2017-12-12 23:51



Qué git-revertir does es crear un commit que deshace los cambios realizados en un commit dado, creando un commit que es reverso (bueno, recíproco) de un commit dado. Por lo tanto

git revert <SHA-1>

debería y funciona

Si desea retroceder a una confirmación especificada, y puede hacerlo porque esta parte del historial aún no se publicó, debe usar git-reset, no git-revertir:

git reset --hard <SHA-1>

(Tenga en cuenta que --hard le haría perder cualquier cambio no comprometido en el directorio de trabajo).

Notas adicionales

Por cierto, tal vez no sea obvio, pero en todos lados donde dice la documentación <commit> o <commit-ish> (o <object>), puedes poner un SHA-1 identificador (completo o abreviado) de commit.


112
2017-12-13 09:54



Revierte dicho compromiso, es decir, agrega el compromiso al contrario. Si quiere pagar una revisión anterior, lo hace:

git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d

83
2017-12-12 23:40



La mejor forma de retrotraerse a una confirmación específica es:

git reset --hard <commit-id>

Entonces:

git push <reponame> -f

59
2017-11-19 13:50



Si sus cambios ya han sido empujados a un público, compartido remoto, y desea revertir todas las confirmaciones entre HEAD y <sha-id>, entonces puedes pasar un rango de compromiso a git revert,

git revert 56e05f..HEAD

y revertirá todos los commits entre 56e05f y HEAD (excluyendo el punto de inicio del rango, 56e05f)


52
2017-12-19 13:15



Actualizado:

Esta respuesta es más simple que mi respuesta: ¿Cómo revertir el repositorio de Git a una confirmación previa?

Respuesta original

# Create a backup of master branch
git branch backup_master

# Point master to '56e05fce' and
# make working directory the same with '56e05fce'
git reset --hard 56e05fce

# Point master back to 'backup_master' and
# leave working directory the same with '56e05fce'.
git reset --soft backup_master

# Now working directory is the same '56e05fce' and
# master points to the original revision. Then we create a commit.
git commit -a -m "Revert to 56e05fce"

# Delete unused branch
git branch -d backup_master

Los dos comandos git reset --hard y git reset --soft son magia aquí. El primero cambia el directorio de trabajo, pero también cambia de cabeza. Arreglamos la cabeza por la segunda.


18
2018-03-22 05:09



Esto es más comprensible:

git checkout 56e05fced -- .
git add .
git commit -m 'Revert to 56e05fced'

Y para demostrar que funcionó:

git diff 56e05fced

3
2018-06-23 16:29



Debería ser tan simple como:

git reset --hard 56e05f

Eso te llevará de vuelta a ese punto específico en el tiempo.


0
2018-01-04 00:15