ultimo - revertir todos los cambios en git




¿Cómo deshago los compromisos más recientes en Git? (20)

Cómo arreglar el compromiso local anterior

Use git-gui (o similar) para realizar un git commit --amend . Desde la GUI puede agregar o eliminar archivos individuales de la confirmación. También puede modificar el mensaje de confirmación.

Cómo deshacer el compromiso local anterior.

Simplemente restablezca su sucursal a la ubicación anterior (por ejemplo, usando gitk o git rebase ). Luego vuelva a aplicar sus cambios de una copia guardada. Después de la recolección de basura en su repositorio local, será como si el compromiso no deseado nunca hubiera ocurrido. Para hacer todo eso en un solo comando, use git reset HEAD~1 .

Advertencia : el uso descuidado de git reset es una buena manera de poner su copia de trabajo en un estado confuso. Recomiendo que los novatos de Git eviten esto si pueden.

Cómo deshacer un compromiso público.

Realizar una selección de cereza inversa ( git-revert ) para deshacer los cambios.

Si aún no ha introducido otros cambios en su sucursal, simplemente puede hacer ...

git revert --no-edit HEAD

Luego empuje su rama actualizada al repositorio compartido.

El historial de confirmaciones mostrará ambas confirmaciones, por separado .

Avanzado: Corrección de sucursal privada en repositorio público.

Esto puede ser peligroso; asegúrese de tener una copia local de la sucursal para volver a utilizarla.

También tenga en cuenta: no quiere hacer esto si alguien más está trabajando en la sucursal.

git push --delete (branch_name) ## remove public version of branch

Limpia tu rama localmente luego repush ...

git push origin (branch_name)

En el caso normal, es probable que no deba preocuparse de que su historial de confirmación de sucursal privada sea prístino. Simplemente presione una confirmación de seguimiento (vea 'Cómo deshacer una confirmación pública' más arriba), y más adelante, haga una squash-merge para ocultar el historial.

Accidentalmente cometí los archivos incorrectos en Git , pero todavía no he enviado el compromiso al servidor.

¿Cómo puedo deshacer esas confirmaciones del repositorio local?


Deshacer la última confirmación:

git reset --soft HEAD^ o git reset --soft HEAD~

Esto deshará la última confirmación.

Aquí --soft significa reiniciar en la puesta en escena.

HEAD~ o HEAD^ significa moverse para cometer antes de HEAD.

Reemplace el último compromiso para nuevo compromiso:

git commit --amend -m "message"

Reemplazará la última confirmación con la nueva confirmación.


Deshacer un commit y rehacer

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. Esto es lo que quieres deshacer.
  2. Esto deja su árbol de trabajo (el estado de sus archivos en el disco) sin cambios, pero deshace la confirmación y deja los cambios que realizó sin programar (para que aparezcan como "Cambios no preparados para la confirmación" en el git status , y deberá Añadirlos de nuevo antes de cometer). Si solo desea agregar más cambios a la confirmación anterior, o cambiar el mensaje de confirmación 1 , puede usar git reset --soft HEAD~ , que es como git reset HEAD~ (donde HEAD~ es lo mismo que HEAD~1 ) pero deja sus cambios existentes en escena.
  3. Hacer correcciones a los archivos del árbol de trabajo.
  4. git add cualquier cosa que quieras incluir en tu nuevo compromiso.
  5. Confirme los cambios, reutilizando el mensaje de confirmación anterior. reset copie la cabeza antigua a .git/ORIG_HEAD ; commit con -c ORIG_HEAD abrirá un editor, que inicialmente contiene el mensaje de registro del commit anterior y le permite editarlo. Si no necesita editar el mensaje, puede usar la opción -C .

Sin embargo, tenga en cuenta que si ha agregado nuevos cambios al índice, el uso de commit --amend los agregará a su confirmación anterior.

Si el código ya está insertado en su servidor y usted tiene permisos para sobrescribir el historial (rebase), entonces:

git push origin master --force

También puedes mirar esta respuesta:

¿Cómo mover HEAD de nuevo a una ubicación anterior? (Cabeza separada)

La respuesta anterior le mostrará el git reflog que se utiliza para averiguar qué es el SHA-1 al que desea volver. Una vez que haya encontrado el punto al que desea deshacer para usar la secuencia de comandos como se explicó anteriormente.

1 Tenga en cuenta, sin embargo, que no necesita restablecer una confirmación anterior si acaba de cometer un error en su mensaje de confirmación . La opción más fácil es git reset (para actualizar los cambios que haya realizado desde entonces) y luego git commit --amend , que abrirá su editor de mensajes de confirmación predeterminado previamente completado con el último mensaje de confirmación.


"Restablecer el árbol de trabajo a la última confirmación"

git reset --hard HEAD^ 

"Limpiar archivos desconocidos del árbol de trabajo"

git clean    

ver - Referencia rápida de Git

NOTA: Este comando eliminará su confirmación anterior, así que use con precaución. git reset --hard es más seguro -


De otra manera:

Verifique la sucursal que desea revertir, luego restablezca su copia de trabajo local a la confirmación que desea que sea la última en el servidor remoto (todo lo que sucederá después de que vaya a irse, adiós). Para hacer esto, en SourceTree hice clic derecho en y seleccioné "Restablecer BRANCHNAME para este compromiso".

Luego navegue al directorio local de su repositorio y ejecute este comando:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Esto borrará todas las confirmaciones después de la actual en su repositorio local, pero solo para esa rama.


Deshacer un compromiso es un poco atemorizante si no sabes cómo funciona. Pero en realidad es increíblemente fácil si lo entiendes.

Digamos que tienes esto, donde C es tu CABEZA y (F) es el estado de tus archivos.

   (F)
A-B-C
    ↑
  master

Quieres hacer nuke commit C y nunca verlo de nuevo . Tu hiciste esto:

git reset --hard HEAD~1

El resultado es:

 (F)
A-B
  ↑
master

Ahora B es la CABEZA. Debido a que --hard - --hard , tus archivos se restablecen a su estado en el commit B.

Ah, pero supongamos que cometer C no fue un desastre, sino solo un poco. Desea deshacer el compromiso pero conserva los cambios para editar un poco antes de realizar un mejor compromiso. Empezando de nuevo desde aquí, con C como tu CABEZA:

   (F)
A-B-C
    ↑
  master

Puedes hacer esto, dejando de lado el --hard :

git reset HEAD~1

En este caso el resultado es:

   (F)
A-B-C
  ↑
master

En ambos casos, HEAD es solo un puntero a la última confirmación. Cuando haces un git reset HEAD~1 , le dices a Git que mueva el puntero HEAD hacia atrás una confirmación. Pero (a menos que uses - --hard ) dejas tus archivos como estaban. Así que ahora git status muestra los cambios que has registrado en C. ¡No has perdido nada!

Para el toque más ligero, incluso puede deshacer su confirmación pero dejar sus archivos y su index :

git reset --soft HEAD~1

Esto no solo deja sus archivos solos, sino que también deja su índice solo. Cuando hagas el git status , verás que los mismos archivos están en el índice que antes. De hecho, justo después de este comando, podrías hacer git commit y estarías rehaciendo el mismo commit que acabas de tener.

Una cosa más: supongamos que destruyes un commit como en el primer ejemplo, ¿ pero luego descubres que lo necesitabas después de todo ? Mala suerte, ¿verdad?

No, todavía hay una manera de recuperarlo. Escriba git reflog y verá una lista de shas de confirmación (parciales) en los que se ha movido. Encuentre la confirmación que destruyó y haga esto:

git checkout -b someNewBranchName shaYouDestroyed

Ahora has resucitado ese compromiso. Los compromisos en realidad no se destruyen en Git durante unos 90 días, por lo que generalmente puede regresar y rescatar uno que no quería deshacerse de él.


En mi caso, accidentalmente cometí algunos archivos que no quería. Así que hice lo siguiente y funcionó:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Verifique los resultados con gitk o git log --stat


Escriba git log y encuentre el último código hash de confirmación y luego ingrese:

git reset <the previous co>

Hay dos escenarios principales

Aún no has empujado el commit

Si el problema fueron los archivos adicionales comprometidos (y no desea que estén en el repositorio), puede eliminarlos usando git rm y luego --amend con --amend

git rm <pathToFile>

También puedes eliminar directorios completos con -r , o incluso combinarlos con otros comandos de Bash

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

Después de eliminar los archivos, puede confirmar, con la opción --amend

git commit --amend -C HEAD # the -C option is to use the same commit message

Esto reescribirá su reciente confirmación local eliminando los archivos adicionales, por lo tanto, estos archivos nunca se enviarán por inserción y también serán eliminados de su repositorio local .git por GC.

Ya empujaste el commit

Puede aplicar la misma solución del otro escenario y luego hacer git push con la opción -f , pero no se recomienda ya que sobrescribe el historial remoto con un cambio divergente (puede desordenar su repositorio).

En su lugar, debe realizar la confirmación sin - --amend (recuerde esto acerca de - enmendar: esa opción reescribe el historial de la última confirmación).


Hay muchas formas de hacerlo:

Git comando para deshacer la última confirmación / confirmaciones anteriores:

Advertencia: No use - hard si no sabe lo que está haciendo. --hard es demasiado peligroso , y podría eliminar tus archivos.

El comando básico para revertir el commit en Git es:

$ git reset --hard <COMMIT -ID>

o

$ git reset --hard HEAD~<n>

COMMIT-ID : ID para el commit

n: es el número de las últimas confirmaciones que desea revertir

Puede obtener el ID de confirmación como se muestra a continuación:

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

donde d81d3f1 y be20eb8 son el ID de confirmación.

Ahora veamos algunos casos:

Supongamos que desea revertir la última confirmación 'd81d3f1'. Aquí hay dos opciones:

$ git reset --hard d81d3f1

o

$ git reset --hard HEAD~1

Supongamos que desea revertir el commit 'be20eb8':

$ git reset --hard be20eb8

Para obtener información más detallada, puede consultar y probar algunos otros comandos también para restablecer la cabeza a un estado específico:

$ git reset --help

Primer intento:

git reflog

Le mostrará todas las acciones posibles que ha realizado en su repositorio, por ejemplo, cometer, fusionar, extraer, etc.

Entonces hazlo:

git reset --hard ActionIdFromRefLog

Quería deshacer las últimas 5 confirmaciones en nuestro repositorio compartido. Busqué el ID de revisión al que quería revertir. Entonces escribí lo siguiente.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

Si has cometido chatarra pero no has empujado,

git reset --soft HEAD~1

HEAD ~ 1 es una abreviatura de cometer antes de head. Alternativamente, puede consultar el SHA-1 del hash si desea restablecerlo. --soft opción eliminará la confirmación, pero dejará todos los archivos modificados "Cambios por confirmar", como lo pondría el estado de git.

Si desea deshacerse de cualquier cambio en los archivos rastreados en el árbol de trabajo desde la confirmación antes de la cabeza, use " --hard " en su lugar.

O

Si ya presionaste y alguien tiró, lo que generalmente es mi caso, no puedes usar git reset . Sin embargo, puedes hacer un git revertir ,

git revert HEAD

Esto creará un nuevo compromiso que revierte todo lo introducido por el compromiso accidental.


Si planea deshacer un compromiso local por completo, lo que haya cambiado lo hizo en el compromiso, y si no se preocupa por eso, simplemente ejecute el siguiente comando.

git reset --hard HEAD^1

(Este comando ignorará su compromiso completo y sus cambios se perderán completamente de su árbol de trabajo local). Si desea deshacer su confirmación, pero desea que se realicen cambios en el área de preparación (antes de la confirmación, como después de git add ), ejecute el siguiente comando.

git reset --soft HEAD^1

Ahora sus archivos comprometidos entran en el área de preparación. Supongamos que si desea subir al escenario los archivos, ya que necesita editar algún contenido incorrecto, realice el siguiente comando

git reset HEAD

Ahora los archivos comprometidos deben provenir del área apilada al área sin apilar. Ahora los archivos están listos para editar, así que, independientemente de lo que cambie, desea editarlo y agregarlo, y realizar un nuevo / nuevo compromiso.

More


Si tiene instalado Git Extras , puede ejecutar git undo para deshacer el último compromiso. git undo 3 deshará las últimas 3 confirmaciones.


Simple, ejecuta esto en tu línea de comando:

git reset --soft HEAD~ 

Un solo comando:

git reset --soft 'HEAD^' 

¡Funciona muy bien deshacer el último commit local!


Usa git revert commit-id

Para obtener el ID de confirmación, solo usa git log


Utilice SourceTree (herramienta gráfica para Git) para ver sus confirmaciones y el árbol. Puede restablecerlo manualmente directamente haciendo clic derecho.


¿Cómo deshacer el último Git commit?

Para restaurar todo de nuevo a la forma en que estaba antes de la última confirmación, debemos restablecer la confirmación antes de HEAD.

  1. Si no quieres mantener los cambios que hiciste:

    git reset --hard HEAD^
    
  2. Si quieres mantener tus cambios:

    git reset --soft HEAD^
    

Ahora revisa tu registro de git. Mostrará que nuestro último commit ha sido eliminado.





git-revert