Me gustaría eliminar todos los cambios en mi copia de trabajo.
La ejecución git status
muestra archivos modificados.
Nada de lo que hago parece eliminar estas modificaciones.
P.ej:
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout `git ls-files -m`
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git reset --hard HEAD
HEAD is now at 6c857e7 boo libraries updated to 2.0.9.2 and rhino.dsl.dll updated.
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
git
revert
git-status
working-copy
rbellamy
fuente
fuente
git reset --hard
no funcionó aquí. Nota: debe sergit checkout -- `git ls-files -m`
para cancelar los archivos (--
)checkout -- <file>
, debería funcionar. La detección de cambios es un poco exigente en algunas situaciones (entre otras, si hay una falta de coincidencia de CRLF)git update-index --assume-unchaged
fuerza el estado sin cambios de los archivos (¡incluso para los cambiados!)Respuestas:
Existen múltiples problemas que pueden causar este comportamiento:
Normalización de final de línea
También he tenido este tipo de problemas. Se reduce a git convirtiendo automáticamente crlf a lf. Esto generalmente es causado por terminaciones de línea mixtas en un solo archivo. El archivo se normaliza en el índice, pero cuando git lo desnormaliza nuevamente para diferenciarlo del archivo en el árbol de trabajo, el resultado es diferente.
Pero si quieres arreglar esto, debes deshabilitar core.autocrlf , cambiar todas las terminaciones de línea a lf y luego habilitarlo nuevamente. O puede deshabilitarlo por completo haciendo:
En vez de core.autocrlf , también puede considerar el uso de
.gitattribute
archivos. De esta manera, puede asegurarse de que todos los que usan el repositorio usen las mismas reglas de normalización, evitando que las terminaciones de líneas mixtas ingresen al repositorio.También considere configurar core.safecrlf para advertir si desea que git le avise cuando se realice una normalización no reversible.
El imbécil páginas de manual de dicen esto:
Sistemas de archivos que no distinguen entre mayúsculas y minúsculas
En los sistemas de archivos que no distinguen entre mayúsculas y minúsculas, cuando el mismo nombre de archivo con una carcasa diferente está en el repositorio, git intenta verificar ambos, pero solo uno termina en el sistema de archivos. Cuando git intenta comparar el segundo, lo compararía con el archivo incorrecto.
La solución sería cambiar a un sistema de archivos que no distinga entre mayúsculas y minúsculas, pero esto en la mayoría de los casos no es factible o renombrar y comprometer uno de los archivos en otro sistema de archivos.
fuente
git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d
. Para enumerar los nombres en mayúsculas y minúsculas de dichos archivos, ejecutegit ls-tree -r --name-only HEAD | fgrep -i -f <(git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -d) | sort -i
Estaba teniendo este problema en Windows, pero no estaba preparado para analizar las ramificaciones del uso
config --global core.autocrlf false
. Tampoco estaba preparado para abandonar otras ramas privadas y otras cosas en mi escondite y comenzar con un nuevo clon. Solo necesito hacer algo. Ahora.Esto funcionó para mí, con la idea de que dejas que git reescriba tu directorio de trabajo por completo:
(Tenga en cuenta que ejecutar simplemente
git reset --hard
no era lo suficientemente bueno ni era simplerm
en los archivos antes de loreset
que se sugiere en los comentarios a la pregunta original)fuente
core.autocrlf
no tuvo ningún efecto.core.autocrlf false
. Esta respuesta funcionó cuando nada más lo haría.Otra solución que puede funcionar para las personas, ya que ninguna de las opciones de texto funcionó para mí:
.gitattributes
con una sola línea:* binary
. Esto le dice a git que trate cada archivo como un archivo binario con el que no puede hacer nada.git checkout -- <files>
restaurarlos a la versión del repositoriogit checkout -- .gitattributes
para restaurar el.gitattributes
archivo a su estado inicialfuente
.gitattributes
al original volvería a introducir el mismo problema, pero, por desgracia, mi problema ya está resuelto. Ninguna de las otras sugerencias funcionó en mi caso.git status
, descubre que son archivos diferentes. Cuando preguntasgit checkout
, descubre que tienen el mismo contenido. Esta solución está indicando temporalmente a git que ignore cualquier ingenio de final de línea posible y se asegure de que su copia local sea byte por byte idéntica a la deHEAD
. Una vez que se haya resuelto, permitir que se reanude la inteligencia está bien, porque no agregará nuevos errores.Para futuras personas que tienen este problema: Tener cambios en el modo de archivo también puede tener los mismos síntomas.
git config core.filemode false
lo arreglaráfuente
git checkout .
git diff
y mostrará archivos con cambios de modo como esteold mode 100755 / new mode 100644
.Esto me ha vuelto loco, especialmente porque no podría solucionarlo sin ninguna de las soluciones que se encuentran en línea. Así es como lo resolví. No puedo tomar los créditos aquí ya que este es el trabajo de un colega :)
Origen del problema: mi instalación inicial de git fue sin conversión automática de línea en Windows. Esto causó que mi confirmación inicial a GLFW no tuviera el final de línea adecuado.
Configuración: Xubuntu 12.04 Git repo con proyecto glfw
Problema: no se pueden restablecer los archivos glfw. Siempre se muestran como modificados, independientemente de lo que intenté.
Resuelto:
fuente
Tenía un archivo .bat con el mismo problema (no podía eliminarlo en archivos sin seguimiento). git checkout: no funcionó, tampoco ninguna de las sugerencias en esta página. Lo único que funcionó para mí fue hacer:
Y luego para eliminar el alijo:
fuente
--keep-index
es importante.¡Tengo el mismo problema dos veces! Ambas veces cuando escondí algunos cambios que hice y luego traté de recuperarlos. No pude hacer estallar los cambios ya que tengo muchos archivos que se han cambiado, ¡pero NO! Son exactamente lo mismo.
Ahora creo que he probado todas las soluciones anteriores sin éxito. Después de probar el
Ahora tengo casi todos los archivos en mi repositorio modificados.
Al diferenciar el archivo, dice que he eliminado todas las líneas y luego las agrego nuevamente.
Un poco inquietante. Ahora evitaré esconderme en el futuro.
La única solución es clonar un nuevo repositorio y comenzar de nuevo. (Lo hice la última vez)
fuente
Intenta hacer un
Eso debería eliminar todos los cambios en el repositorio local de trabajo actual
fuente
git checkout -f <another recent branch>
volver a mi sucursal congit checkout -f <branch I'm working on>
Solo pude solucionar esto eliminando temporalmente el archivo .gitattributes de mi repositorio (que definió
* text=auto
y*.c text
).Corrí
git status
después de eliminar y las modificaciones desaparecieron. No regresaron incluso después de que .gitattributes se volviera a colocar en su lugar.fuente
Tener finales de línea consistentes es algo bueno. Por ejemplo, no activará fusiones innecesarias, aunque triviales. He visto a Visual Studio crear archivos con terminaciones de línea mixtas.
Además, algunos programas como bash (en linux) requieren que los archivos .sh estén terminados en LF.
Para asegurarse de que esto suceda, puede usar gitattributes. Funciona a nivel de repositorio sin importar el valor de autcrlf.
Por ejemplo, puede tener atributos .gitat como este: * text = auto
También puede ser más específico por tipo / extensión de archivo si importa en su caso.
Entonces, autocrlf puede convertir terminaciones de línea para programas de Windows localmente.
En un proyecto mixto C # / C ++ / Java / Ruby / R, Windows / Linux, esto funciona bien. No hay problemas hasta ahora.
fuente
También tuve los mismos síntomas, pero fue causado por algo diferente.
Yo no era capaz de:
incluso en
git rm --cached app.js
él firma como eliminado y en archivos sin seguimiento pude ver app.js. Pero cuando intentérm -rf app.js
y volvígit status
a peform , todavía me muestra el archivo en 'sin seguimiento'.Después de un par de intentos con un colega, descubrimos que fue causado por Grunt.
A medida que
Grunt
se ha activado, y debido a que app.js se ha generado a partir de un par de otros archivos js, descubrimos que después de cada operación con archivos js (también este app.js) Grunt recrea nuevamente app.js.fuente
Este problema también puede ocurrir cuando un contribuyente al repositorio trabaja en una máquina Linux, o las ventanas con Cygwin y los permisos de archivo cambian. Git solo sabe de 755 y 644.
Ejemplo de este problema y cómo verificarlo:
Para evitar esto, debes asegurarte de configurar git correctamente usando
fuente
Aquí hay muchas soluciones y tal vez debería haber intentado algunas de ellas antes de encontrar la mía. De todos modos aquí hay uno más ...
Nuestro problema era que no teníamos aplicación para las líneas finales y el repositorio tenía una mezcla de DOS / Unix. Peor aún era que en realidad era un repositorio de código abierto en esta posición, y que habíamos bifurcado. Aquellos con la propiedad principal del repositorio del sistema operativo tomaron la decisión de cambiar todas las líneas finales a Unix y se realizó la confirmación que incluía una
.gitattributes
para hacer cumplir las terminaciones de línea.Desafortunadamente, esto parecía causar problemas muy parecidos a los descritos aquí, donde una vez que se fusionó el código antes del DOS-2-Unix, los archivos se marcarían para siempre como modificados y no se podrían revertir.
Durante mi investigación para esto, me encontré con: https://help.github.com/articles/dealing-with-line-endings/ - Si me enfrento a este problema nuevamente, primero comenzaría probando esto.
Aquí esta lo que hice:
Inicialmente hice una fusión antes de darme cuenta de que tenía este problema y tuve que abortarlo
git reset --hard HEAD
( me encontré con un conflicto de fusión. ¿Cómo puedo abortar la fusión? )Abrí los archivos en cuestión en VIM y cambié a Unix (
:set ff=unix
). Sedos2unix
podría usar una herramienta comocomprometido
fusionó la entrada
master
(el maestro tiene los cambios de DOS-2-Unix)git checkout old-code-branch; git merge master
Se resolvieron los conflictos y los archivos volvieron a ser DOS, así que tuve que hacerlo
:set ff=unix
cuando estaba en VIM. (Tenga en cuenta que he instalado https://github.com/itchyny/lightline.vim que me permitió ver cuál es el formato del archivo en la línea de estado de VIM)fuente
El problema con el que me encontré es que Windows no se preocupa por la capitalización del nombre de archivo, pero git sí. Entonces, git almacenó una versión en mayúsculas y minúsculas del archivo, pero solo pudo verificar una.
fuente
Cometí todos los cambios y luego hice y deshago el commit. Esto funciono para mi
git add.
git commit -m "Confirmación aleatoria"
git reset --HAD HEAD ~ 1
fuente
Normalmente, en GIT para borrar todas sus modificaciones y archivos nuevos, los siguientes 2 comandos deberían funcionar muy bien (tenga cuidado , esto eliminará todos sus nuevos archivos + carpetas que haya creado y restaurará todos sus archivos modificados al estado de su actual commit ):
Tal vez una mejor opción a veces es simplemente hacer "git stash push" con un mensaje opcional, así:
Esto también borrará todos sus archivos nuevos y modificados, pero los tendrá escondidos en caso de que desee restaurarlos. El almacenamiento en GIT se lleva de una rama a otra, por lo que puede restaurarlos en una rama diferente, si lo desea.
Como nota al margen, en caso de que ya haya montado algunos archivos recién agregados y desee deshacerse de ellos, esto debería ser el truco:
Si todo lo anterior no funciona para usted , lea a continuación lo que funcionó para mí hace un tiempo:
Me encontré con este problema varias veces antes. Actualmente estoy desarrollando en una máquina con Windows 10 proporcionada por mi empleador. Hoy, este comportamiento particular de git fue causado por crear una nueva rama de mi rama "desarrollar". Por alguna razón, después de que volví a "desarrollar" la rama, algunos archivos aparentemente aleatorios persistieron y aparecían como "modificados" en "estado de git".
Además, en ese momento no podía pagar otra rama, por lo que estaba atascado en mi rama "desarrollar".
Esto es lo que hice:
Me di cuenta de que la nueva rama que creé desde "desarrollo" el día de hoy se mostraba en el primer mensaje de "confirmación", al que se hace referencia al final "HEAD -> desarrollo, origen / desarrollo, origen / CABEZA, The-branch-i-created -el día de hoy ".
Como realmente no lo necesitaba, lo eliminé:
Los archivos modificados seguían apareciendo, así que lo hice:
Esto resolvió mi problema:
Por supuesto
$ git stash list
, mostrará los cambios escondidos, y como tenía pocos y no necesitaba ninguno de mis escondites, lo hice$ git stash clear
para ELIMINAR TODOS LOS STASHES.NOTA : No he intentado hacer lo que alguien sugirió aquí antes que yo:
Esto puede haber funcionado también, me aseguraré de intentarlo la próxima vez que me encuentre con este problema.
fuente
Si clona un repositorio y ve instantáneamente los cambios pendientes, entonces el repositorio está en un estado inconsistente. Por favor NO comente
* text=auto
desde el.gitattributes
archivo. Eso se puso allí específicamente porque el propietario del repositorio quiere que todos los archivos se almacenen de manera consistente con las terminaciones de línea LF.Según lo indicado por HankCa, seguir las instrucciones en https://help.github.com/articles/dealing-with-line-endings/ es el camino a seguir para solucionar el problema. Botón fácil:
Luego combine (o solicite) la sucursal con el propietario del repositorio.
fuente
Nada más en esta página funcionó. Esto finalmente funcionó para mí. No muestra archivos no rastreados o comprometidos.
fuente
Para mí, el problema fue que Visual Studio se abrió al ejecutar el comando
git checkout <file>
Después de cerrar Visual Studio, el comando funcionó y finalmente pude aplicar mi trabajo desde la pila. Por lo tanto, verifique todas las aplicaciones que puedan realizar cambios en su código, por ejemplo, SourceTree, SmartGit, NotePad, NotePad ++ y otros editores.
fuente
Nos enfrentamos a una situación similar en nuestra empresa. Ninguno de los métodos propuestos no nos ayudó. Como resultado de la investigación, se reveló el problema. Lo que pasaba era que en Git había dos archivos, cuyos nombres solo diferían en el registro de símbolos. Los sistemas Unix los veían como dos archivos diferentes, pero Windows se estaba volviendo loco. Para resolver el problema, eliminamos uno de los archivos del servidor. Después de eso, en los repositorios locales en Windows ayudó a los siguientes comandos (en diferentes secuencias):
fuente
Lo resolví editando .git / config, agregando:
Luego fui a .git / refs / heads / name_branch y coloqué la identificación del último commit
enter code here
fuente
Lo resolví de esta manera:
Eso fue lo que funcionó para mí.
fuente
Una solución propuesta aquí no funcionó, descubrí que el archivo era en realidad un enlace a algunos caracteres especiales:
fuente