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.