¿Cómo descarto los cambios en mi copia de trabajo que no están en el índice?
git
version-control
Solo lectura
fuente
fuente
git-clean
solo elimina archivos no rastreados delgit-clean -df
puede ser peligroso. Eliminará los archivos locales no rastreados (p. Ej., Cubiertos por un .gitignore). Lea todo lo siguiente cuidadosamente y considere la opción de pago git. en cambiogit status
da una sugerencia sobre cómo hacer eso!git checkout -- .
git status
da la sugerencia:git restore
.git restore
es un nuevo comando exactamente para este propósito. Vea mi actualización de 2019 .Respuestas:
Otra forma más rápida es:
No necesita incluir
--include-untracked
si no desea ser exhaustivo al respecto.Después de eso, puede soltar ese alijo con un
git stash drop
comando si lo desea.fuente
--include-untracked
.git reset
comando también descartará los cambios en el índice.git stash
, ni ninguna variedad degit checkout
descartará eliminaciones no preparadas. De acuerdo con el resultado degit status
, la respuesta correcta real aquí es un poco de saborgit reset HEAD
git checkout -- .
hace el trabajo con un solo comando.Para todos los archivos sin clasificar en el directorio de trabajo actual, use:
Para un archivo específico use:
--
aquí para eliminar la ambigüedad del argumento .fuente
git status
error: The following untracked working tree files would be overwritten by checkout: ...
.git checkout -- .
significa lo mismo quegit checkout .
, excepto que eres explícito sobre el hecho de que no estás especificando el nombre de la sucursal. Ambos dicen que revise la versión HEAD en la rama en la que estoy actualmente para ''. o './'. Si lo hacesgit checkout branch-name directory-or-file-name
en general, obtienes la versión HEAD dedirectory-or-file-name
en ramabranch-name
.Parece que la solución completa es:
git clean
elimina todos los archivos no rastreados ( advertencia : si bien no eliminará los archivos ignorados mencionados directamente en .gitignore, puede eliminar los archivos ignorados que residen en carpetas ) ygit checkout
borra todos los cambios no organizados.fuente
git reset --hard
Esto comprueba el índice actual para el directorio actual, descartando todos los cambios en los archivos desde el directorio actual hacia abajo.
o esto que extrae todos los archivos del índice, sobrescribiendo los archivos del árbol de trabajo.
fuente
git checkout .
ygit checkout -- .
?git stash save --keep-index
.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.
-d
: Eliminar directorios no rastreados además de archivos no rastreados-f
: Fuerza (puede no ser necesario dependiendo de laclean.requireForce
configuración)Corre
git help clean
para ver el manualfuente
Mi favorito es
Eso le permite revertir selectivamente fragmentos.
Ver también:
fuente
-p
agrega una buena capa extra de seguridad. Combínalo congit clean -d
para responder realmente a OP.Como ninguna respuesta sugiere la combinación exacta de opciones que uso, aquí está:
Este es el texto de ayuda en línea para las
git clean
opciones utilizadas :-d
Elimine los directorios sin seguimiento además de los archivos sin seguimiento. Si un directorio no rastreado es administrado por un repositorio Git diferente, no se elimina de manera predeterminada. Use la
-f
opción dos veces si realmente desea eliminar dicho directorio.-f
Si la variable de configuración de Git
clean.requireForce
no está ajustado afalse
, Git limpia se negará a borrar archivos o directorios a menos que reciba-f
,-n
o-i
. Git se negará a eliminar directorios dentro del.git
subdirectorio o archivo, a menos que-f
se dé un segundo .-x
No use las reglas de ignorar de
.gitignore
(por directorio) y$GIT_DIR/info/exclude
, pero aún use las reglas de ignorar dadas con las-e
opciones. Esto permite eliminar todos los archivos sin seguimiento, incluidos los productos de compilación. Esto se puede usar (posiblemente junto congit reset
) para crear un directorio de trabajo prístino para probar una compilación limpia.Además,
git checkout .
debe hacerse en la raíz del repositorio.fuente
git reset --hard
? (que en realidad es equivalentegit reset --hard HEAD
y debería funcionar cualquiera que sea el directorio actual ...)git clean -dfx
, aquí hay un consejo que utilizo para estar seguro antes de ejecutarlo: solo ejecutargit clean -d -x -n
antes, para mostrar la lista de archivos a eliminar, luego confirmar la operación ejecutandogit clean -d -x -f
(pongo el argumento-n
, resp.-f
al final para poder cambiarlo rápidamente en una terminal).gitignore
, los perderá. Así que considere hacer una copia de seguridad de su proyecto antes de esto.Si simplemente desea eliminar los cambios en los archivos existentes , use
checkout
( documentado aquí ).--
) le dice a Git que lo que sigue debe tomarse como su segundo argumento (ruta), que omitió la especificación de una rama..
) indica todas las rutas.Si desea eliminar los archivos agregados desde su última confirmación, use
clean
( documentado aquí ):-i
opción inicia un interactivoclean
, para evitar eliminaciones erróneas.Si desea mover los cambios a un espacio de espera para un acceso posterior , use
stash
( documentado aquí ):fuente
Realmente encontré este artículo útil para explicar cuándo usar qué comando: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/
Hay un par de casos diferentes:
Si no ha organizado el archivo, entonces lo usa
git checkout
. Checkout "actualiza los archivos en el árbol de trabajo para que coincidan con la versión en el índice". Si los archivos no se han organizado (también se ha agregado al índice) ... este comando esencialmente revertirá los archivos a la última confirmación.git checkout -- foo.txt
Si ha organizado el archivo, use git reset. Restablecer cambia el índice para que coincida con una confirmación.
git reset -- foo.txt
Sospecho que usar
git stash
es una opción popular ya que es un poco menos peligroso. Siempre puede volver a él si accidentalmente vuela demasiado cuando usa git reset. El reinicio es recursivo por defecto.Eche un vistazo al artículo anterior para obtener más consejos.
fuente
La forma más fácil de hacer esto es mediante el uso de este comando:
Este comando se usa para descartar cambios en el directorio de trabajo:
https://git-scm.com/docs/git-checkout
En el comando git, el almacenamiento de archivos sin seguimiento se logra mediante el uso de:
http://git-scm.com/docs/git-stash
fuente
.
al final. Para mi futuro: ¡el período es esencial !git clean -fd
para limpiar archivos que no están en el índice.Si no está interesado en mantener los cambios no organizados (especialmente si los cambios organizados son archivos nuevos), esto me parece útil:
fuente
git checkout -f
man git-checkout
:-f, --force
Al cambiar de rama, proceda incluso si el índice o el árbol de trabajo difieren de HEAD. Esto se usa para descartar cambios locales.
Al retirar rutas del índice, no falle en las entradas no fusionadas; en cambio, las entradas no fusionadas se ignoran.
fuente
A medida que escribe git status, se muestra (use "git checkout - ..." para descartar cambios en el directorio de trabajo) .
p.ej
git checkout -- .
fuente
Puede usar git stash: si algo sale mal, aún puede revertirlo. Similar a alguna otra respuesta aquí, pero esta también elimina todos los archivos sin etapas y también todas las eliminaciones sin etapas:
si verificas que todo está bien, tira el alijo:
La respuesta de Bilal Maqsood con
git clean
también funcionó para mí, pero con el alijo tengo más control: si hago algo accidentalmente, todavía puedo recuperar mis cambiosACTUALIZAR
Creo que hay 1 cambio más (no sé por qué esto funcionó antes):
git add . -A
en vez degit add .
sin los
-A
archivos eliminados no se organizaránfuente
Actualización 2019:
Desde julio de 2019 , se ha producido un nuevo comando que hace exactamente esto:
git restore
.En
git status
, ahora Git recomienda usar este comando en lugar degit checkout
como solía hacerlo.Si bien este comando también se puede usar para restaurar el árbol de trabajo a una confirmación específica o para restaurar el contenido del índice, de manera predeterminada, el árbol de trabajo se restaura al estado en el índice (lo que se solicita aquí).
Entonces, para restaurar los archivos que coinciden con una especificación de ruta (deshacerse de sus cambios no organizados), debe hacer lo siguiente:
Por ejemplo, para restaurar todos los cambios no organizados en el directorio actual, puede ejecutar:
Si ejecuta esto desde la raíz del proyecto, restaurará todos los cambios no organizados en todo el repositorio.
Tenga en cuenta que, al igual que con
git checkout -- .
(como señaló Mariusz Nowak), esto solo descartará los cambios en los archivos rastreados por Git y no descartará ningún archivo nuevo no rastreado. Si desea descartar cualquier cambio sin clasificar, incluidos los nuevos archivos sin seguimiento, puede ejecutar un adicional:Sin embargo, tenga mucho cuidado con este comando posterior, ya que podría descartar archivos de los que no tenía intención de deshacerse.
Nota sobre
git restore
: como se trata de un nuevo comando, su página de manual muestra una advertencia:Por lo tanto, es posible que esta respuesta quede desactualizada si el comportamiento cambia en el futuro. Por lo tanto, sería aconsejable ejecutar un rápido
man git-restore
antes de usarlo.fuente
git restore .
funcionó perfectamente. Gracias.git restore <filename>
y funcionó perfectamente.git restore .
restauran todos los archivos en el directorio actual, no en todo el repositorio.En lugar de descartar cambios, restablezco mi control remoto al origen. Nota: este método es restaurar completamente su carpeta a la del repositorio.
Así que hago esto para asegurarme de que no se sientan allí cuando git reset (más tarde, excluye gitignores en Origin / branchname)
NOTA: Si desea mantener los archivos aún no rastreados, pero no en GITIGNORE, puede omitir este paso, ya que borrará estos archivos no rastreados que no se encuentran en su repositorio remoto (gracias @XtrmJosh).
Entonces yo
Luego reinicio al origen
Eso lo devolverá al punto de partida. Al igual que RE-Clonar la rama, MIENTRAS mantengo todos mis archivos guardados localmente y en su lugar.
Actualizado por comentario de usuario a continuación: Variación para restablecer la rama actual en la que se encuentra el usuario.
fuente
git reset --hard @{u}
que restablece la rama en donde la rama remota de seguimiento actual esIntenté todas las soluciones anteriores, pero aún así no pude deshacerme de los archivos nuevos y sin clasificar.
Úselo
git clean -f
para eliminar esos archivos nuevos, ¡pero con precaución! Tenga en cuenta la opción de fuerza.fuente
simplemente di
Eliminará todos sus cambios locales. También puedes usarlo más tarde diciendo
o git stash pop
fuente
Solo usa:
Hecho. Fácil.
Si realmente te importa tu pila de alijo, puedes seguir con
git stash drop
. Pero en ese momento es mejor usar (de Mariusz Nowak):Sin embargo, me gusta
git stash -u
más porque "descarta" todos los cambios rastreados y no rastreados en un solo comando . Sin embargo,git checkout -- .
solo descarta los cambios rastreados, ygit clean -df
solo descarta los cambios no rastreados ... y escribir ambos comandos es ahora demasiado trabajo :)fuente
git stash -u
pronto (Git 2.14.x / 2.15, Q3 2017) evolucionará un poco: stackoverflow.com/a/46027357/6309git stash -k
en mi opinión.Para hacer un descarte permanente:
git reset --hard
Para guardar los cambios para más tarde:
git stash
fuente
Esto funciona incluso en directorios que son; fuera de los permisos normales de git.
Me paso recientemente
fuente
git help clean
"-d Elimina los directorios sin seguimiento además de los archivos sin seguimiento".tienes un comando git muy simple
git checkout .
fuente
fuente
En mi opinión,
debería hacer el truco. Según la documentación de Git sobre git clean
Descripción
Opciones
fuente
No importa en qué estado se encuentre su repositorio, siempre puede restablecer cualquier confirmación anterior:
Esto descartará todos los cambios que se hicieron después de esa confirmación.
fuente
Otra forma de deshacerse de los archivos nuevos que es más específica que git clean -df (le permitirá deshacerse de algunos archivos, no necesariamente todos), es agregar primero los archivos nuevos al índice, luego guardarlos y luego soltarlos. reserva.
Esta técnica es útil cuando, por alguna razón, no puede eliminar fácilmente todos los archivos no rastreados por algún mecanismo ordinario (como rm).
fuente
Lo que sigue es realmente solo una solución si está trabajando con una bifurcación de un repositorio donde se sincroniza regularmente (por ejemplo, solicitud de extracción) con otro repositorio. Respuesta corta: eliminar fork y reformak, pero leer las advertencias en github .
Tuve un problema similar, quizás no idéntico, y me entristece decir que mi solución no es la ideal, pero en última instancia es efectiva.
A menudo tenía mensajes de estado de git como este (que implican al menos 2/4 archivos):
Un buen ojo notará que estos archivos tienen dopplegangers que son una sola letra en caso de que estén apagados. De alguna manera, y no tengo idea de qué me llevó por este camino para comenzar (ya que no estaba trabajando con estos archivos desde el repositorio ascendente), había cambiado estos archivos. Pruebe las muchas soluciones enumeradas en esta página (y otras páginas) que no parecen ayudar.
Pude solucionar el problema eliminando mi repositorio bifurcado y todos los repositorios locales, y reformateando. Esto por sí solo no fue suficiente; upstream tuvo que cambiar el nombre de los archivos en cuestión a nuevos nombres de archivo. Mientras no tenga ningún trabajo no comprometido, sin wikis y sin problemas que difieran del repositorio ascendente, debería estar bien. Upstream puede no estar muy contento con usted, por decir lo menos. En cuanto a mi problema, es sin duda un error del usuario, ya que no soy tan hábil con git, pero el hecho de que está lejos de ser fácil de solucionar, también es un problema con git.
fuente
Cuando quieras transferir un alijo a otra persona:
[editar] como se comentó, es posible nombrar las reservas. Bueno, usa esto si quieres compartir tu escondite;)
fuente
git stash save "Feature X work in progress"
.Puede crear su propio alias que describa cómo hacerlo de manera descriptiva.
Uso el siguiente alias para descartar cambios.
Descartar cambios en una (lista de) archivo (s) en el árbol de trabajo
Luego puede usarlo como el siguiente para descartar todos los cambios:
O simplemente un archivo:
De lo contrario, si desea descartar todos los cambios y también los archivos no rastreados, utilizo una combinación de pago y limpieza:
Limpiar y descartar cambios y archivos sin seguimiento en el árbol de trabajo
Entonces el uso es simple como el siguiente:
Ahora está disponible en el próximo repositorio de Github que contiene muchos alias:
fuente
Tuve una situación extraña en la que un archivo siempre no está en escena, esto me ayuda a resolverlo.
fuente