¿Cómo descarto los cambios no organizados en Git?

4820

¿Cómo descarto los cambios en mi copia de trabajo que no están en el índice?

Solo lectura
fuente
99
git-cleansolo elimina archivos no rastreados del
Yega
24
Para aclarar el comentario de Asenar anterior, git-clean -dfpuede 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 cambio
jacanterbury
15
'git clean -df' ¡Ten cuidado! Lo intenté y perdí carpetas de claves que no se pueden restaurar ... ¡Ay!
Gabe Karkanis
46
¡golpear git statusda una sugerencia sobre cómo hacer eso! git checkout -- .
Paulo
44
@Paulo: a partir de julio 2019, git statusda la sugerencia: git restore. git restorees un nuevo comando exactamente para este propósito. Vea mi actualización de 2019 .
prosoitos

Respuestas:

2686

Otra forma más rápida es:

git stash save --keep-index --include-untracked

No necesita incluir --include-untrackedsi no desea ser exhaustivo al respecto.

Después de eso, puede soltar ese alijo con un git stash dropcomando si lo desea.

Greg Hewgill
fuente
122
Y para ser minucioso al respecto, también querrás --include-untracked.
TJ Crowder
99
@KarimSamir: La pregunta se refiere específicamente a los cambios que no están en el índice . El git resetcomando también descartará los cambios en el índice.
Greg Hewgill
146
git checkout -. es mucho más rápido
Frank
38
Ni el git stash, ni ninguna variedad de git checkoutdescartará eliminaciones no preparadas. De acuerdo con el resultado de git status, la respuesta correcta real aquí es un poco de saborgit reset HEAD
Chris Warth
127
Esto contamina la pila de alijo. git checkout -- .hace el trabajo con un solo comando.
Felipe Tonello
5340

Para todos los archivos sin clasificar en el directorio de trabajo actual, use:

git checkout -- .

Para un archivo específico use:

git checkout -- path/to/file/to/revert

--aquí para eliminar la ambigüedad del argumento .

Tobi
fuente
117
Esta parece ser la forma canónica de git. es decir, exactamente qué git te dice que hagas si git status
escribes
27
No funciona si hay archivos sin seguimiento. Dice Git error: The following untracked working tree files would be overwritten by checkout: ....
Michael Iles
92
pregunta para novatos, ¿qué significa "git checkout -". significa semánticamente?
kaid
120
@Ninjack git checkout -- .significa lo mismo que git 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 haces git checkout branch-name directory-or-file-nameen general, obtienes la versión HEAD de directory-or-file-nameen rama branch-name.
akgill
23
En mi opinión, esta variante es imperfecta, ya que no maneja la situación cuando el repositorio modificado no está en la revisión HEAD en el momento de la limpieza de los cambios y NO desea actualizarlo a HEAD, y solo desea limpiar los cambios.
alexykot
1899

Parece que la solución completa es:

git clean -df
git checkout -- .

git cleanelimina 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 ) y git checkoutborra todos los cambios no organizados.

Mariusz Nowak
fuente
116
Las otras dos respuestas en realidad no funcionan, esta sí.
John Hunt
18
@dval esto se debe a que el primer comando eliminó los archivos no indexados y el segundo eliminó los cambios no escalonados (de los archivos indexados). Entonces, si no tuvo ningún cambio por etapas, esto es lo mismo que volver al último compromiso congit reset --hard
Amanuel Nega
3
use -dff si el directorio no rastreado es un clon git.
accuya
87
Tenga cuidado al ejecutar git clean -df. Si no comprende lo que hace, puede estar eliminando archivos que quiere conservar, como robots.txt, archivos cargados, etc.
ctlockey
40
Como dijo @ctlockey, el primer comando también elimina directorios si están compuestos solo de archivos ignorados ... Perdí un montón de archivos de configuración en mi proyecto :( Tenga cuidado.
Maxime Lorant
326

Esto comprueba el índice actual para el directorio actual, descartando todos los cambios en los archivos desde el directorio actual hacia abajo.

git checkout .

o esto que extrae todos los archivos del índice, sobrescribiendo los archivos del árbol de trabajo.

git checkout-index -a -f
CB Bailey
fuente
28
Hola, ¿cuál es la diferencia entre git checkout .y git checkout -- .?
Evan Hu
55
@Evan: No hay diferencia en este caso.
Robert Siemer
10
@Robert Siemer y en el caso general?
RJFalconer
2
@Evan: mal lugar para hacer esta pregunta. - No está relacionado con la pregunta del OP, y no está relacionado con la respuesta aquí.
Robert Siemer
14
+1 Esta es la RESPUESTA CORRECTA, ya que maneja correctamente el caso en que algunos archivos tienen cambios organizados y no organizados. Tenga en cuenta que esta solución DESECHA los cambios no organizados; si desea conservarlos, entonces debe usar la respuesta de @ greg-hewgill de git stash save --keep-index.
Ruibarbo
248
git clean -df

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 la clean.requireForceconfiguración)

Corre git help cleanpara ver el manual

Elvis Ciotti
fuente
¿Por qué esta respuesta no tiene todos los votos? respondió en el 2011 y sigue siendo correcto.
Eugene Braginets
106

Mi favorito es

git checkout -p

Eso le permite revertir selectivamente fragmentos.

Ver también:

git add -p
Ben
fuente
99
Me encanta la capacidad de ver el cambio real antes de que se descarte.
Penghe Geng
Esto es lo que yo uso. git checkout -p y luego "a" para aceptar todo.
Mattis
2
Nunca he pensado en eso. Eso -pagrega una buena capa extra de seguridad. Combínalo con git clean -dpara responder realmente a OP.
Stephan Henningsen
96

Como ninguna respuesta sugiere la combinación exacta de opciones que uso, aquí está:

git clean -dfx
git checkout .

Este es el texto de ayuda en línea para las git cleanopciones 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 -fopción dos veces si realmente desea eliminar dicho directorio.

-f

Si la variable de configuración de Git clean.requireForceno está ajustado a false, Git limpia se negará a borrar archivos o directorios a menos que reciba -f, -no -i. Git se negará a eliminar directorios dentro del .gitsubdirectorio o archivo, a menos que -fse 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 -eopciones. Esto permite eliminar todos los archivos sin seguimiento, incluidos los productos de compilación. Esto se puede usar (posiblemente junto con git 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.

Martin G
fuente
+1 para esta solución. Con respecto a su comentario de que "git checkout. Debe hacerse en la raíz del repositorio", ¿tal vez podría mencionar que podemos hacerlo git reset --hard? (que en realidad es equivalente git reset --hard HEADy debería funcionar cualquiera que sea el directorio actual ...)
ErikMD
2
También con respecto al primer comando git clean -dfx, aquí hay un consejo que utilizo para estar seguro antes de ejecutarlo: solo ejecutar git clean -d -x -nantes, para mostrar la lista de archivos a eliminar, luego confirmar la operación ejecutando git clean -d -x -f(pongo el argumento -n, resp. -fal final para poder cambiarlo rápidamente en una terminal)
ErikMD
55
Nota rápida de que esto es irreversible, y si tiene archivos .gitignore, los perderá. Así que considere hacer una copia de seguridad de su proyecto antes de esto.
Rob
69

Si simplemente desea eliminar los cambios en los archivos existentes , use checkout( documentado aquí ).

git checkout -- .
  • No se especifica ninguna rama, por lo que comprueba la rama actual.
  • El guión doble ( --) le dice a Git que lo que sigue debe tomarse como su segundo argumento (ruta), que omitió la especificación de una rama.
  • El punto ( .) indica todas las rutas.

Si desea eliminar los archivos agregados desde su última confirmación, use clean( documentado aquí ):

git clean -i 
  • La -iopción inicia un interactivo clean, para evitar eliminaciones erróneas.
  • Un puñado de otras opciones están disponibles para una ejecución más rápida; ver la documentación

Si desea mover los cambios a un espacio de espera para un acceso posterior , use stash( documentado aquí ):

git stash
  • Todos los cambios se moverán a Git's Stash, para un posible acceso posterior.
  • Un puñado de opciones están disponibles para un escondite más matizado; ver la documentación
2540625
fuente
Esto convertirá exactamente sus cambios y descartará los archivos recién agregados de la confirmación anterior.
Yohan Chung
votó a favor para la explicación :)
Archie G. Quiñones
62

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:

  1. 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

  2. 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 stashes 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.

blak3r
fuente
60

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:

git checkout -- .

https://git-scm.com/docs/git-checkout

En el comando git, el almacenamiento de archivos sin seguimiento se logra mediante el uso de:

git stash -u

http://git-scm.com/docs/git-stash

AHM Forhadul Islam
fuente
19
Dos veces he venido aquí, leí esta respuesta y olvidé la .al final. Para mi futuro: ¡el período es esencial !
bejado
2
Necesitaba deshacerme de todos los cambios locales en un subdirectorio, sin eliminar cualquier otro cambio. Esta respuesta ayudó mucho, gracias
Ally
2
Describa lo que hacen los dos comandos. Es realmente inútil no tener explicación.
Chris Kennedy el
2
excelente. la comprobación hace en un comando lo que hace el más popular en dos. También se puede seguir con git clean -fdpara limpiar archivos que no están en el índice.
oligofren
49

Si no está interesado en mantener los cambios no organizados (especialmente si los cambios organizados son archivos nuevos), esto me parece útil:

git diff | git apply --reverse
Joshua Kunzmann
fuente
44

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.

Bijan
fuente
2
¡Esto descartaría cambios en el índice! (Y el OP requiere dejarlos como están.)
Robert Siemer
44

A medida que escribe git status, se muestra (use "git checkout - ..." para descartar cambios en el directorio de trabajo) .

p.ej git checkout -- .

Erdem ÖZDEMİR
fuente
1
Votado en contra porque no ayuda descartar rápidamente todos los archivos. Los tres puntos indican que debe enumerar todos los archivos. Esto es especialmente malo si necesita descartar toneladas de archivos a la vez, por ejemplo. durante una gran fusión después de haber organizado todas las modificaciones que desea mantener
usr-local-ΕΨΗΕΛΩΝ
2
Por supuesto, el comando correcto es "git checkout -". Un solo punto. En el comentario, los tres puntos eran algo gramatical, para indicar que hay muchas otras opciones que podrían haberse usado ...
Josef.B
39

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:

git add .
git stash

si verificas que todo está bien, tira el alijo:

git stash drop

La respuesta de Bilal Maqsood con git cleantambién funcionó para mí, pero con el alijo tengo más control: si hago algo accidentalmente, todavía puedo recuperar mis cambios

ACTUALIZAR

Creo que hay 1 cambio más (no sé por qué esto funcionó antes):

git add . -A en vez de git add .

sin los -Aarchivos eliminados no se organizarán

Asped
fuente
39

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 de git checkoutcomo 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:

git restore <pathspec>

Por ejemplo, para restaurar todos los cambios no organizados en el directorio actual, puede ejecutar:

git restore .

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:

git clean -df

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:

Este comando es experimental. El comportamiento puede cambiar.

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-restoreantes de usarlo.

prosoitos
fuente
2
Quería revertir mis cambios no organizados solo sin afectar los archivos recién agregados, por lo que git restore .funcionó perfectamente. Gracias.
Saurabh Misra
3
Lo hice git restore <filename>y funcionó perfectamente.
Merlín
1
Funcionó bien para mí.
Prometeo
1
De acuerdo con la página del manual, se git restore .restauran todos los archivos en el directorio actual, no en todo el repositorio.
jarno
1
Tienes razón. ¡Gracias! Lo acabo de probar y, de hecho, ese es el caso. Sin embargo, es recursivo. Entonces, cuando se ejecuta desde la raíz del proyecto, se aplica a todo el repositorio. Editaré mi respuesta.
prosoitos
35

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).

git add --all

Entonces yo

git fetch --all

Luego reinicio al origen

git reset --hard origin/branchname

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.

git reset --hard @{u}
Mella
fuente
Esta es mi opción preferida, pero ¿por qué agrega primero todos los cambios? Hasta donde sé, esto solo modifica la lista de directorios en los archivos Git, mientras usa git reset --hard, esto se perderá de todos modos mientras los directorios aún se eliminarán.
XtrmJosh
No lo hago en Mac o Linux, Github Windows PowerShell a veces deja los archivos allí después de reiniciar. Creo que es porque git reset establece todos los archivos en el repositorio a su estado original. Si no se agregan, no se tocan. El cliente de escritorio luego recogerá "hey, este archivo está aquí y necesita ser confirmado"
Nick
Sentido hecho. No uso Windows, así que no he visto ese problema (no he usado Windows durante los últimos meses al menos, no recuerdo mucho antes de eso, es un gran desenfoque lamentable). Podría valer la pena señalar la justificación en su respuesta principal :)
XtrmJosh
También me encontré con este problema en una Mac ahora. Si el archivo no se rastrea en el Repo, a veces git reset no lo toca. Realmente no puedo aislar el "POR QUÉ", pero cuando eso sucede, si restablezco, y todavía tengo 1 o dos archivos no confirmados, agrego --todos y restablezco-- duro nuevamente
Nick
2
Una variante poco agradable de esta me gusta es git reset --hard @{u}que restablece la rama en donde la rama remota de seguimiento actual es
user2221343
31

Intenté todas las soluciones anteriores, pero aún así no pude deshacerme de los archivos nuevos y sin clasificar.

Úselo git clean -fpara eliminar esos archivos nuevos, ¡pero con precaución! Tenga en cuenta la opción de fuerza.

artur
fuente
21

simplemente di

git stash

Eliminará todos sus cambios locales. También puedes usarlo más tarde diciendo

git stash apply 

o git stash pop

piyushmandovra
fuente
21

Solo usa:

git stash -u

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):

git checkout -- .
git clean -df

Sin embargo, me gusta git stash -umás porque "descarta" todos los cambios rastreados y no rastreados en un solo comando . Sin embargo, git checkout -- .solo descarta los cambios rastreados, y git clean -dfsolo descarta los cambios no rastreados ... y escribir ambos comandos es ahora demasiado trabajo :)

Ben Wilde
fuente
Nota: git stash -upronto (Git 2.14.x / 2.15, Q3 2017) evolucionará un poco: stackoverflow.com/a/46027357/6309
VonC
Si recibo la pregunta del OP correcto, los archivos indexados deben mantenerse. Solo se deben eliminar los cambios en el escenario. Entonces debería estar git stash -ken mi opinión.
tomar
21

Para hacer un descarte permanente: git reset --hard

Para guardar los cambios para más tarde: git stash

SANGEETHA PH
fuente
16

Esto funciona incluso en directorios que son; fuera de los permisos normales de git.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

Me paso recientemente

GlassGhost
fuente
¡Pero ten cuidado, que el contenido ignorado por git no retendrá sus permisos originales! Por lo tanto, puede causar un riesgo de seguridad.
twicejr
@twicejr Estás equivocado, lee git help clean"-d Elimina los directorios sin seguimiento además de los archivos sin seguimiento".
GlassGhost
¿Por qué configuraste todos tus archivos para que sean de lectura / escritura mundial? No es una buena práctica.
Ghoti
@Ghoti mi mal, 664 es correcto? también puedes editar la respuesta.
GlassGhost
Establecer todos los permisos en 664 hace muchas suposiciones sobre qué tipo de permisos necesita el proyecto. Creo que usar esa parte del comando causará problemas a algunas personas.
ianrandmckenzie
15

tienes un comando git muy simple git checkout .

khem raj regmi
fuente
14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory
vivekporwal04
fuente
12

En mi opinión,

git clean -df

debería hacer el truco. Según la documentación de Git sobre git clean

git-clean - Elimina archivos no rastreados del árbol de trabajo

Descripción

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.

Si se dan argumentos opcionales ..., solo esas rutas se ven afectadas.

Opciones

-d Eliminar directorios no rastreados además de archivos no rastreados. Si un directorio no rastreado es administrado por un repositorio Git diferente, no se elimina de manera predeterminada. Use la opción -f dos veces si realmente desea eliminar dicho directorio.

-f --force Si la variable de configuración de Git clean.requireForce no está establecida en false, git clean se negará a ejecutarse a menos que se especifique -f, -n o -i.

Lahiru
fuente
11

No importa en qué estado se encuentre su repositorio, siempre puede restablecer cualquier confirmación anterior:

git reset --hard <commit hash>

Esto descartará todos los cambios que se hicieron después de esa confirmación.

msangel
fuente
2
Esto también descartará todo en el índice (no solo las cosas que no están en el índice), que está más allá de lo que pide el OP.
Linus Arver
10

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).

tjb
fuente
9

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):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# 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:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

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.

bbarker
fuente
7

Cuando quieras transferir un alijo a otra persona:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[editar] como se comentó, es posible nombrar las reservas. Bueno, usa esto si quieres compartir tu escondite;)

dos veces
fuente
55
En realidad, Git alijo puede tener un título. Por ejemplo git stash save "Feature X work in progress".
Colin D Bennett
7

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

discard = checkout --

Luego puede usarlo como el siguiente para descartar todos los cambios:

discard .

O simplemente un archivo:

discard filename

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

cleanout = !git clean -df && git checkout -- .

Entonces el uso es simple como el siguiente:

cleanout

Ahora está disponible en el próximo repositorio de Github que contiene muchos alias:

Pau
fuente
7

Tuve una situación extraña en la que un archivo siempre no está en escena, esto me ayuda a resolverlo.

git rm .gitattributes
git add -A
git reset --hard

SDV
fuente