ultimo todos revertir pendientes los hacer deshacer descartar conectar con como clean cambios archivos git git-commit git-reset git-revert

todos - revertir git clean



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

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.


Para cambiar el ultimo commit

Reemplace los archivos en el índice:

git rm --cached *.class git add *.java

Luego, si se trata de una sucursal privada, modifique el compromiso:

git commit --amend

O, si se trata de una rama compartida, haga un nuevo compromiso:

git commit -m ''Replace .class files with .java files''


( para cambiar una confirmación anterior , use la impresionante rebase interactiva )

ProTip ™: agregue *.class a un gitignore para evitar que esto vuelva a suceder.

Para revertir un commit

Modificar una confirmación es la solución ideal si necesita cambiar la última confirmación, pero se reset una solución más general.

Puedes reiniciar git a cualquier commit con:

git reset @~N

Donde N es el número de confirmaciones antes de HEAD , y @~ reinicia en la confirmación anterior.

Entonces, en lugar de enmendar el compromiso, podrías usar:

git reset @~ git add *.java git commit -m "Add .java files"

Consulte git help reset , específicamente las secciones en --soft --mixed y --hard , para una mejor comprensión de lo que hace esto.

Reflog

Si te equivocas, siempre puedes usar el reflog para encontrar confirmaciones eliminadas:

$ git reset @~ $ git reflog c4f708b HEAD@{0}: reset: moving to @~ 2c52489 HEAD@{1}: commit: added some .class files $ git reset 2c52489 ... and you''re back where you started



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 -


Agrega / elimina archivos para obtener las cosas de la manera que deseas:

git rm classdir git add sourcedir

Luego enmendar el compromiso:

git commit --amend

La confirmación errónea anterior se editará para reflejar el nuevo estado del índice; en otras palabras, será como si nunca hubiera cometido el error en primer lugar.

Tenga en cuenta que solo debe hacer esto si aún no ha empujado. Si ha presionado, entonces solo tendrá que confirmar un arreglo normalmente.


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 SourceTree (GUI para GitHub), puede hacer clic con el botón derecho en la confirmación y hacer una ''Confirmación inversa''. Esto debería deshacer tus cambios.

En la terminal:

También puede utilizar:

git revert

O:

git reset --soft HEAD^ # Use --soft if you want to keep your changes. git reset --hard HEAD^ # Use --hard if you don''t care about keeping your changes.


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>


Esto me tomó un tiempo entenderlo, así que quizás esto ayude a alguien ...

Hay dos formas de "deshacer" su último compromiso, dependiendo de si ya ha hecho público su compromiso (enviado a su repositorio remoto):

Cómo deshacer un commit local

Digamos que me comprometí localmente, pero ahora quiero eliminar ese compromiso.

git log commit 101: bad commit # latest commit, this would be called ''HEAD'' commit 100: good commit # second to last commit, this is the one we want

Para restaurar todo a la forma en que estaba antes de la última confirmación, debemos reset la confirmación antes de HEAD :

git reset --soft HEAD^ # use --soft if you want to keep your changes git reset --hard HEAD^ # use --hard if you don''t care about keeping the changes you made

Ahora git log mostrará que nuestro último commit ha sido eliminado.

Cómo deshacer un compromiso público.

Si ya ha hecho públicos sus confirmaciones, deseará crear una nueva confirmación que "revertirá" los cambios realizados en su confirmación anterior (HEAD actual).

git revert HEAD

Sus cambios ahora serán revertidos y listos para que los cometa:

git commit -m ''restoring the file I removed by accident'' git log commit 102: restoring the file I removed by accident commit 101: removing a file we don''t need commit 100: adding a file that we need

Para más información, echa un vistazo a Git Basics - Undoing Things


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


Prefiero usar git rebase -i para este trabajo, porque aparece una buena lista donde puedo elegir los compromisos para deshacerme de ellos. Puede que no sea tan directo como algunas otras respuestas aquí, pero se siente bien .

Elija la cantidad de confirmaciones que desea enumerar, luego invoque de esta manera (para enlistar las últimas tres)

git rebase -i HEAD~3

Lista de muestra

pick aa28ba7 Sanity check for RtmpSrv port pick c26c541 RtmpSrv version option pick 58d6909 Better URL decoding support

Luego, git eliminará las confirmaciones para cualquier línea que elimines.


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 desea deshacerlo permanentemente y ha clonado algún repositorio

El ID de confirmación puede ser visto por

git log

Entonces puedes hacer ...

git reset --hard <commit_id> git push origin <branch_name> -f


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 quieres eliminar archivos en el último commit, puedes usar esto:

git reset --hard HEAD~1

Y si necesita archivos en la última confirmación, puede usar esto:

git reset --soft HEAD~1


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~


Solo reinicie el comando a continuación usando git :

git reset --soft HEAD~1

Explique: lo que hace git reset , básicamente se reset a cualquier confirmación a la que le gustaría volver, luego, si la combina con la tecla --soft , volverá, pero mantenga los cambios en su (s) archivo (s), así que regresa a la etapa en la que se acaba de agregar el archivo, HEAD es el jefe de la rama y, si se combina con ~1 (en este caso, también usa HEAD^ ), volverá solo a una confirmación que desea. ..

Creo los pasos en la imagen a continuación con más detalles, incluidos todos los pasos que pueden suceder en situaciones reales y confirmando el código:


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


Usa reflog para encontrar un estado correcto

git reflog

REFLOG ANTES DE REINICIAR

Seleccione el reflog correcto (f3cb6e2 en mi caso) y escriba

git reset --hard f3cb6e2

Después de eso, el repositorio HEAD se restablecerá a ese HEADid REGISTRO DESPUÉS DE RESET

Finalmente el reflog se parece a la imagen de abajo.

REFLOG FINAL


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 rm yourfiles/*.class git commit -a -m "deleted all class files in folder ''yourfiles''"

o

git reset --hard HEAD~1

Advertencia: el comando anterior eliminará de forma permanente las modificaciones a los archivos .java (y cualquier otro archivo) que desee confirmar.

El hard reset HEAD-1 a HEAD-1 establecerá su copia de trabajo en el estado de confirmación antes de la confirmación incorrecta.