remoto - Cómo deshacer mi último commit en Git
git revert head (8)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo deshago los compromisos más recientes en Git? 75 respuestas
¿Cómo puedo comprometer mi último commit en git?
Lo es
git reset --hard HEAD
o
git reset --hard HEAD^
?
Para mantener los cambios de la confirmación que desea deshacer
git reset --soft HEAD^
Para destruir los cambios de la confirmación que desea deshacer
git reset --hard HEAD^
También puede decir
git reset --soft HEAD~2
para retroceder 2 confirmaciones.
Edición: como se mencionó charsi, si estás en Windows, deberás poner HEAD o cometer hash entre comillas.
git reset --soft "HEAD^"
git reset --soft "asdf"
Si aún no ha empujado sus cambios, use git reset --soft [Hash for one commit]
para revertir a un commit específico. --soft
le dice a git que mantenga los cambios que se retrotraen (es decir, marque los archivos como modificados). --hard
le dice a git que elimine los cambios que se están --hard
.
Si no está totalmente seguro de lo que quiere decir con "no comprometerse" y no sabe si desea usar git reset
, consulte " Volver a un compromiso de Git anterior ".
Si está tratando de entender mejor el git reset
, consulte " ¿Puede explicar qué hace el" reinicio de git "en inglés simple? ".
Si sabe que quiere usar git reset
, aún depende de lo que quiere decir con "no cometer". Si todo lo que quieres hacer es deshacer el acto de cometer, dejando todo lo demás intacto, usa:
git reset --soft HEAD^
Si desea deshacer el acto de cometer y todo lo que había preparado, pero deje el árbol de trabajo (sus archivos intactos):
git reset HEAD^
Y si realmente desea deshacerlo completamente , elimine todos los cambios no confirmados y restablezca todo a la confirmación anterior (como lo hizo la pregunta original):
git reset --hard HEAD^
La pregunta original también formuló que es HEAD^
no HEAD
. HEAD
refiere al compromiso actual; generalmente, la punta de la rama actualmente retirada. ^
Es una notación que se puede adjuntar a cualquier especificador de confirmación y significa "la confirmación anterior". Por lo tanto, HEAD^
es la confirmación anterior a la actual, así como master^
es la confirmación anterior a la punta de la rama principal.
Aquí está la parte de la documentación de git-rev-parse que describe todas las formas de especificar confirmaciones ( ^
es solo una básica entre muchas).
Solo una nota: si estás usando ZSH y ves el error
zsh: no matches found: HEAD^
Necesitas escapar del ^
git reset --soft HEAD/^
Ten cuidado con eso
Pero puedes usar el comando rebase
git rebase -i HEAD~2
Se abrirá una vi
y todo lo que tiene que hacer es eliminar la línea con la confirmación. También puede leer las instrucciones que se mostraron en la edición correcta @ vi
, se pueden realizar un par de cosas en este modo
git reset --soft HEAD^
Mantendrá los cambios modificados en su árbol de trabajo.
git reset --hard HEAD^
LOS CAMBIOS QUE HIZAS!
Si te comprometes con la rama equivocada.
Mientras que en la rama equivocada:
-
git log -2
le da hashes de 2 últimas confirmaciones, digamos$prev
y$last
-
git checkout $prev
checkout correcto confirmar -
git checkout -b new-feature-branch
crea una nueva rama para la función -
git cherry-pick $last
parches de una rama con tus cambios
Luego puede seguir uno de los métodos sugeridos anteriormente para eliminar su confirmación de la primera rama.
Tenga cuidado, reset --hard
también eliminará sus modificaciones locales (no confirmadas).
git reset --hard HEAD^
Nota: si está en Windows, deberá citar el HEAD ^ para que
git reset --hard "HEAD^"