Pregunta git: deshacer todos los cambios del directorio de trabajo, incluidos los archivos nuevos


Cómo eliminar todos los cambios del directorio de trabajo, incluidos los nuevos archivos sin seguimiento. Yo sé eso git checkout -f lo hace, pero no elimina los nuevos archivos sin seguimiento creados desde la última confirmación.

¿Alguien tiene una idea de cómo hacer eso?


931
2017-07-07 04:07


origen


Respuestas:


git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

1398
2017-07-07 04:09



El método más seguro, que uso con frecuencia:

git clean -fd

223
2018-04-18 16:15



Para todos unstaged uso de archivos:

git checkout -- .

los . al final es importante.

Puedes reemplazar . con un nombre de subdirectorio para borrar solo un subdirectorio específico de su proyecto. El problema se aborda específicamente aquí.


161
2017-09-26 15:29



Eche un vistazo al git clean mando.

git-clean - Elimina archivos sin seguimiento del árbol de trabajo

Limpia el árbol de trabajo mediante la eliminación recursiva de archivos que no están bajo control de versiones, comenzando desde el directorio actual.

Normalmente, solo se eliminan los archivos desconocidos para git, pero si se especifica la opción -x, también se eliminan los archivos ignorados. Esto puede, por ejemplo, ser útil para eliminar todos los productos de compilación.


57
2017-07-07 04:09



Los siguientes trabajos:

git add -A .
git stash
git stash drop stash@{0}

Tenga en cuenta que esto descartará los cambios locales sin escenario y en etapas. Por lo tanto, debes comprometer todo lo que quieras conservar antes de ejecutar estos comandos.

Un caso de uso típico: movió una gran cantidad de archivos o directorios, y luego quiere volver al estado original.

Créditos: https://stackoverflow.com/a/52719/246724


36
2017-12-16 11:32



Puedes hacer esto en dos pasos:

  1. Revertir archivos modificados: git checkout -f
  2. Eliminar archivos sin seguimiento: git clean -fd

26
2017-12-14 15:14



Pensé que era (advertencia: siguiente será acabar con todo)

$ git reset --hard HEAD
$ git clean -fd

los reset para deshacer los cambios. los clean para eliminar cualquier sin seguimiento Files y reirectories.


23
2017-12-15 20:36



git reset --hard origin/{branchName}

Eliminará todos los archivos sin seguimiento.


6
2018-05-17 15:20



Una solución alternativa es comprometer los cambios y luego deshacerse de esos compromisos. Esto no tiene un beneficio inmediato al principio, pero abre la posibilidad de comprometerse en fragmentos, y crear una etiqueta de git para la copia de seguridad.

Puedes hacerlo en la rama actual, así:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

O puede hacerlo en HEAD separado. (suponiendo que comiences en la rama BRANCHNAME):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

Sin embargo, lo que suelo hacer es comprometer en fragmentos, y luego nombrar algunas o todas las confirmaciones como "DESECHAR: ...". A continuación, utilice la base de datos interactiva para eliminar los errores y mantener los buenos.

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

Esto es más detallado, pero permite revisar exactamente qué cambios desea descartar.

los git lol y git lola los atajos han sido muy útiles con este flujo de trabajo.


2
2017-08-01 20:12



git clean -i primero le mostrará los artículos que se eliminarán y procederá después de su confirmación. Me parece útil cuando se trata de archivos importantes que no deben eliminarse accidentalmente.

Ver git help clean para obtener más información, incluidas algunas otras opciones útiles.


2
2017-10-05 10:18



Si desea descartar todos los cambios, puede usar cualquiera de las opciones válidas en un alias en .gitconfig. Por ejemplo:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

Uso: git discard


2
2017-10-25 20:04