restaurar remoto recuperar quitar locales eliminar deshacer cambios borrado archivos git undo git-reset git-index

remoto - Cómo deshacer mi último commit en Git



git revert head (8)

Esta pregunta ya tiene una respuesta aquí:

¿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:

  1. git log -2 le da hashes de 2 últimas confirmaciones, digamos $prev y $last
  2. git checkout $prev checkout correcto confirmar
  3. git checkout -b new-feature-branch crea una nueva rama para la función
  4. 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^"