git deshacer todos los cambios no confirmados o no guardados


834

Estoy tratando de deshacer todos los cambios desde mi última confirmación. Lo intenté git reset --hardy git reset --hard HEADdespués de ver esta publicación . Respondo con head ahora en 18c3773 ... pero cuando miro mi fuente local, todos los archivos todavía están allí. ¿Qué me estoy perdiendo?


1
Este es un gran recurso directamente de Github: Cómo deshacer (casi) cualquier cosa con Git
— jasonleonhard 03 de

Fácil de entender y simple de leer: git-scm.com/book/en/v2/Git-Basics-Undoing-Things
— MyTitle

Respuestas:


1620
  • Esto desestabilizará todos los archivos con los que podría haber preparado git add:

    git reset
    
  • Esto revertirá todos los cambios locales no confirmados (deben ejecutarse en la raíz del repositorio):

    git checkout .
    

    También puede revertir los cambios no confirmados solo a un archivo o directorio en particular:

    git checkout [some_dir|file.txt]
    

    Otra forma de revertir todos los cambios no confirmados (más largos para escribir, pero funciona desde cualquier subdirectorio):

    git reset --hard HEAD
    
  • Esto eliminará todos los archivos no rastreados locales, por lo que solo quedan los archivos rastreados por git:

    git clean -fdx
    

    ADVERTENCIA: -x también eliminará todos los archivos ignorados, incluidos los especificados por .gitignore! Es posible que desee utilizar -npara la vista previa de los archivos que se eliminarán.


En resumen: la ejecución de los comandos a continuación es básicamente equivalente a la nueva git clonefuente original (pero no vuelve a descargar nada, por lo que es mucho más rápido):

git reset
git checkout .
git clean -fdx

El uso típico para esto sería en los scripts de compilación, cuando debe asegurarse de que su árbol esté absolutamente limpio: no tiene modificaciones ni archivos de objetos creados localmente o artefactos de compilación, y desea que funcione muy rápido y no volver a generar clonar todo el repositorio cada vez.


@turibe eso es correcto. Tuve que iniciar mi proyecto varias veces porque estaba eliminando todas las dependencias descargadas y mi carpeta .idea. Necesito una mejor solución.
— EresDev

2
@EresDev, no tiene que ejecutar git clean, deshacerá los cambios no confirmados pero mantendrá todos los archivos sin seguimiento o agregados. Pero, puede afectar el resultado de la compilación porque algunos de los archivos no rastreados pueden estar interfiriendo. Por ejemplo, ¿qué pasa si su directorio .idea está dañado?
— mvp

git resetme dice que tengo cambios que necesito guardar
— Daniel Springer

1
corriendo git clean -fdxborró mi node_modulesy .env, genial
— fires3as0n

1
@ fires3as0n ¿Qué más esperabas? Esto estaba destinado a suceder. También hay una advertencia en la respuesta.
— Rishav

148

Si desea " deshacer " todos los cambios no confirmados, simplemente ejecute:

git stash
git stash drop

Si tiene archivos no rastreados (verifíquelos ejecutando git status), estos se pueden eliminar ejecutando:

git clean -fdx

git stashcrea un nuevo alijo que se convertirá en alijo @ {0} . Si desea verificar primero, puede correr git stash listpara ver una lista de sus escondites. Se verá algo así como:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Cada alijo lleva el nombre del mensaje de confirmación anterior.


2
De hecho, es una buena solución, pero debe realizar cambios git add .antes git stashporque me mostraba cambios no comprometidos incluso despuésgit stash
— EresDev


12

Estoy usando el árbol de origen ... Puede revertir todos los cambios no confirmados con 2 sencillos pasos:

1) solo necesita restablecer el estado del archivo del espacio de trabajo

ingrese la descripción de la imagen aquí 2) seleccione todos los archivos sin etapas (comando + a), haga clic derecho y seleccione eliminar

ingrese la descripción de la imagen aquí

Es así de simple: D


Si restablece y luego cambia de rama y rebase en la rama reseteada, esto dolerá. Restablecer es útil, pero no debe usarse para descartar cambios no confirmados. En el caso de soltar cambios no confirmados, solo guarde y suelte el alijo.
— Dinu Nicolae

11

Lo que hago es

git add . (adding everything)
git stash 
git stash drop

Un trazador de líneas: git add . && git stash && git stash drop


este es el mejor
— Madrugada

7

Para aquellos que llegaron aquí buscando si podían deshacer git clean -f -d, por lo que se eliminó un archivo creado en eclipse ,

Puede hacer lo mismo desde la interfaz de usuario utilizando "restaurar desde el historial local" para la referencia: Restaurar desde el historial local


3
No rechacé la votación, sin embargo, su respuesta es menos que clara en su intención; Sería útil que redactara la primera oración de la respuesta.
— Mark Schultheiss el

5

Estados en transición de un compromiso a un nuevo compromiso

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

Acción para la transición del estado

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

Comprobar diff

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

Volver a la última confirmación

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

Equivalente a git clone, sin volver a descargar nada

git reset && git checkout . && git clean -fdx

No veo cómo esto se relaciona con la pregunta formulada. Esto es solo una serie de recetas extrañas, sin ninguna sustancia real.
— mvp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.