git deshacer todos los cambios no comprometidos o no guardados


Estoy intentando deshacer todos los cambios desde mi última confirmación. Probé git reset --hard y git reset --hard HEAD después de ver este post. I responde con la cabeza está ahora en 18c3773... pero cuando miro mi fuente local todos los archivos siguen ahí. ¿Qué me estoy perdiendo?

Author: commonSenseCode, 2012-12-29

6 answers

  • Esto eliminará todos los archivos con los que haya preparado git add:

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

    git checkout .
    

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

    git checkout [some_dir|file.txt]
    

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

    git reset --hard HEAD
    
  • Esto eliminará todos los archivos locales sin seguimiento, por lo que solo los archivos rastreados de git permanecen:

    git clean -fdx
    

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


Para resumirlo: ejecutar los comandos a continuación es básicamente equivalente a fresh git clone desde la fuente 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 scripts de compilación, cuando debe asegurarse de que su árbol está absolutamente limpio - no tiene ninguna modificación o archivos de objetos creados localmente o artefactos de construcción,y desea hacer que funcione muy rápido y no volver a clonar todo el repositorio cada vez.

 1153
Author: mvp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 21:31:24

Si desea "deshacer " todos los cambios no comprometidos simplemente ejecute:

git stash
git stash drop

Si tiene archivos sin seguimiento (compruebe ejecutando git status), estos pueden eliminarse ejecutando:

git clean -fdx

git stash crea un nuevo alijo que se convertirá en alijo@{0}. Si desea comprobar primero puede ejecutar git stash list para 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 stash lleva el nombre del mensaje de confirmación anterior.

 106
Author: Abram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-18 20:59:59

También existe git stash - que "almacena" sus cambios locales y puede volver a aplicarse en un momento posterior o eliminarse si ya no es necesario

Más información sobre el almacenamiento

 15
Author: keshav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-28 21:17:00

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

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

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

introduzca la descripción de la imagen aquí

Es así de simple: D

 11
Author: user1872384,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-14 17:19:58

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

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

 4
Author: Abdul Rahman K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-17 11:32:11

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

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 de 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
 2
Author: Zii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-23 18:06:21