¿Cómo revertir los cambios no comprometidos, incluidos archivos y carpetas?
-
24-10-2019 - |
Pregunta
¿Existe un comando git para revertir todos los cambios no comprometidos en un árbol y índice de trabajo y también eliminar archivos y carpetas recién creados?
Solución
Puedes ejecutar estos dos comandos:
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)
git clean -fd
Otros consejos
Si desea revertir los cambios solo en el directorio de trabajo actual, use
git checkout -- .
Y antes de eso, puede enumerar los archivos que se volverán sin hacer ninguna acción, solo para verificar lo que sucederá, con:
git checkout --
Use "Git Checkout - ..." para descartar los cambios en el directorio de trabajo
git checkout -- app/views/posts/index.html.erb
o
git checkout -- *
Elimina todos los cambios realizados en archivos no estados en estado de git, por ejemplo,
modified: app/controllers/posts.rb
modified: app/views/posts/index.html.erb
Una forma no trivial es ejecutar estos dos comandos:
git stash
Esto moverá sus cambios al alijo, lo que lo lleva de regreso al estado de la cabezagit stash drop
Esto eliminará el último alijo creado en el último comando.
git clean -fd
No ayudó, quedaron nuevos archivos. Lo que hice es eliminar totalmente todo el árbol de trabajo y luego
git reset --hard
Ver "¿Cómo despejaré mi directorio de trabajo local en GIT?"Para consejo para agregar el -x
opción para limpiar:
git clean -fdx
Nota -x
Flag eliminará todos los archivos ignorados por Git, así que tenga cuidado (consulte la discusión en la respuesta a la que me refiero).
Creo que puedes usar el siguiente comando: git reset --hard
Tenga en cuenta que aún pueden haber archivos que no parecen desaparecer: podrían estar sin editar, pero Git podría haberlos marcado como editado debido a los cambios de CRLF / LF. Vea si ha realizado algunos cambios en .gitattributes
recientemente.
En mi caso, he agregado configuraciones de CRLF en el .gitattributes
Archivo y todos los archivos permanecieron en la lista de "archivos modificados" debido a esto. Cambiar la configuración .gitattributes los hizo desaparecer.
Si tiene un cambio no comprometido (está solo en su copia de trabajo) que desea volver a la copia en su última confirmación, haga lo siguiente:
git checkout filename
Puede usar el siguiente comando Git que puede volver a retroceder todos los cambios no comprometidos realizados en su repositorio:
git checkout .
Ejemplo:
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: application/controllers/Drivers.php
modified: application/views/drivers/add.php
modified: application/views/drivers/load_driver_info.php
modified: uploads/drivers/drivers.xlsx
no changes added to commit (use "git add" and/or "git commit -a")
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .
ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
Git 2.23 introducido git restore
Comando para restaurar los archivos de árbol de trabajo.
https://git-scm.com/docs/git-restore
Para restaurar todos los archivos en el directorio actual
Git restauración.
Si desea restaurar todos los archivos de origen C para que coincida con la versión en el índice, puede hacer
git restaurar '*.c'
Un camino seguro y largo:
git branch todelete
git checkout todelete
git add .
git commit -m "I did a bad thing, sorry"
git checkout develop
git branch -D todelete
Normalmente uso de esta manera que funcione bien:
mv fold/file /tmp
git checkout fold/file
Usar:
git reset HEAD filepath
Por ejemplo:
git reset HEAD om211/src/META-INF/persistence.xml