tag - ¿Volver a un commit por un hash SHA en Git?
git ver archivos modificados (9)
Esta pregunta ya tiene una respuesta aquí:
- Cómo revertir un repositorio Git a un commit anterior 39 respuestas
No tengo claro cómo funciona git revert
. Por ejemplo, quiero volver a una confirmación seis confirmaciones detrás de la cabeza, revirtiendo todos los cambios en las confirmaciones intermedias intermedias.
Digamos que su hash SHA es 56e05fced214c44a37759efa2dfc25a65d8ae98d
. Entonces, ¿por qué no puedo hacer algo como:
git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
Debería ser tan simple como:
git reset --hard 56e05f
Eso te llevará de vuelta a ese punto específico en el tiempo.
Esto es más comprensible:
git checkout 56e05fced -- .
git add .
git commit -m ''Revert to 56e05fced''
Y para demostrar que funcionó:
git diff 56e05fced
Esto podría funcionar:
git checkout 56e05f
echo ref: refs/heads/master > .git/HEAD
git commit
La mejor manera de revertir a un compromiso específico es:
git reset --hard <commit-id>
Entonces:
git push <reponame> -f
Lo que hace git-revert es crear una confirmación que deshace los cambios realizados en una confirmación dada, creando una confirmación que es inversa (bueno, recíproca) de una confirmación dada. Por lo tanto
git revert <SHA-1>
debería y funciona.
Si desea retroceder a una confirmación específica y puede hacer esto porque esta parte del historial aún no se publicó, debe usar git-reset , no git-revert:
git reset --hard <SHA-1>
(Tenga en cuenta que --hard
le haría perder cualquier cambio no confirmado en el directorio de trabajo).
Notas adicionales
Por cierto, quizás no sea obvio, pero en todas partes donde la documentación dice <commit>
o <commit-ish>
(o <object>
), puede poner un identificador SHA (completo o acortado) de commit.
Revierte dicho compromiso, es decir, agrega el compromiso opuesto a él. Si desea pagar una revisión anterior, usted hace:
git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
Si desea confirmar la 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 realizar 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"
Si sus cambios ya se han enviado a un control remoto público compartido , y desea revertir todas las confirmaciones entre HEAD
y <sha-id>
, entonces puede pasar un rango de confirmación a git revert
,
git revert 56e05f..HEAD
y revertirá todas las confirmaciones entre 56e05f
y HEAD
(excluyendo el punto de inicio del rango, 56e05f
).
Actualizado:
Esta respuesta es más simple que mi respuesta: ¿Cómo revertir el repositorio Git a un commit anterior?
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 mágicos aquí. El primero cambia el directorio de trabajo, pero también cambia la cabecera. Arreglamos la cabeza por el segundo.