Después git reset --hard, git statusme da archivos dentro de la Changes not staged for commit:sección.
También lo he intentado git reset ., git checkout -- .y fue git checkout-index -f -aen vano.
Entonces, ¿cómo puedo deshacerme de esos cambios no organizados?
Esto parece afectar solo a los archivos de proyecto de Visual Studio. Extraño. Vea esta pasta: http://pastebin.com/eFZwPn9Z . Lo que es especial con esos archivos es que en .gitattributes tengo:
*.sln eol=crlf
*.vcproj eol=crlf
*.vcxproj* eol=crlf
Además, autocrlfse establece en falso en mi global .gitconfig. ¿Podría ser de alguna manera relevante?

.significa directorio actual, no directorio raízgitversion ¿Estás cometiendo un error tonto o tienes una versión antigua que tiene errores?Respuestas:
Tuve el mismo problema y estaba relacionado con el
.gitattributesarchivo. Sin embargo, el tipo de archivo que causó el problema no se especificó en.gitattributes.Pude resolver el problema simplemente ejecutando
fuente
git rm .gitattributeselimina .gitattributes del índice.git add -Aagrega todo (incluida la eliminación de .gitattributes) al índice, que entonces debería ser solo la eliminación de .gitattributes, si ese fuera realmente el problema.git reset --hardrestablece todos los cambios no confirmados, que incluirían la eliminación de .gitattributes. Esencialmente, esto ignora los atributos .gitattributes (y la* text=autodirectiva) para un commit al eliminarlo, luego restablecer el índice mientras se elimina, por lo tanto, volver a colocarlo, pero después de que ya haya restablecido los otros archivos, no se modificaron nuevamente..gitattributes: "fatal: pathpec '.gitattributes' no coincide con ningún archivo"fatal: pathspec '.gitattributes' did not match any files. ¿Qué estoy haciendo mal?¡¡¡RESUELTO!!!
He resuelto este problema usando los siguientes pasos
1) Eliminar todos los archivos del índice de Git.
2) Reescribe el índice Git para recoger todas las nuevas terminaciones de línea.
La solución fue parte de los pasos descritos en el sitio git https://help.github.com/articles/dealing-with-line-endings/
fuente
Git no restablecerá los archivos que no están en el repositorio. Así que puedes:
Esto organizará todos los cambios, lo que hará que Git esté al tanto de esos archivos y luego los restablecerá.
Si esto no funciona, puede intentar esconder y soltar los cambios:
fuente
git reset --hard" restablecer el área de preparación y el directorio de trabajo para que coincidan "? Si un archivo no está organizado, obviamente queremos eliminarlo cuando lo hagamosreset --hard.Si usa Git para Windows, este es probablemente su problema
He tenido el mismo problema y el alijo, el restablecimiento completo, la limpieza o incluso todos seguían dejando cambios. Lo que resultó ser el problema fue el modo de archivo x que git no configuró correctamente. Este es un "problema conocido" con git para windows. Los cambios locales se muestran en el estado de gitk y git como modo antiguo 100755 modo nuevo 100644, sin ninguna diferencia real de archivos.
La solución es ignorar el modo de archivo:
Más información aquí.
fuente
rm -rf *; git checkout HEAD .no lo hizo. ¡Uf!De acuerdo, he resuelto el problema.
Parecía que el
.gitattributesarchivo, que contiene:hizo que los archivos del proyecto aparecieran sin etapas. No tengo idea de por qué es así, y realmente espero que alguien que conozca las formas de git nos dé una buena explicación.
Mi solución fue eliminar estos archivos, y para poner
autocrlf = falsebajo[core]en.git/config.Esto no equivale exactamente a lo mismo que la configuración anterior, ya que requiere que todos los desarrolladores tengan
autocrlf = false. Me gustaría encontrar una solución mejor.EDITAR:
Comenté las líneas incriminatorias, las descomenté y funcionó. ¡Qué ... ni siquiera ...!
fuente
autocrlf = false. Me fusioné en los cambios desde el repositorio svn ascendente (git svn fetch/git merge git-svn) y me quedé con 1 archivo marcado como modificado. Lo extraño es que he tenido este problema antes y todo lo que tenía que hacer era verificar otra rama (con la-fbandera) y luego volver. Lo hice y funcionó, pero cuando cambié a una rama de características, ¡el "cambio" había vuelto! Su edición al final de la respuesta fue la solución. En mi caso, comenté / descomenté una línea en la parte superior de mi archivo .gitattributes:* text=auto !eol.gitattributes, corragit status, descomente las líneas.gitattributes, corragit statusnuevamente.gitattributesnuevo. Lagit diffmuestra probablemente el famoso muro del / de la pared roja de color verde que es típica de las diferencias de fin de línea.Causa posible # 1 - Normalización de final de línea
Una situación en la que esto puede suceder es cuando el archivo en cuestión se registró en el repositorio sin la configuración correcta para las terminaciones de línea (1), lo que resultó en un archivo en el repositorio con terminaciones de línea incorrectas o terminaciones de línea mixtas. Para confirmar, verifique que
git diffsolo muestre cambios en los finales de línea (estos pueden no ser visibles por defecto, intentegit diff | cat -vver los retornos de carro como^Mcaracteres literales ).Posteriormente, alguien probablemente agregó
.gitattributeso modificó lacore.autocrlfconfiguración para normalizar las terminaciones de línea (2). Basado en la.gitattributesconfiguración global o, Git ha aplicado cambios locales a su copia de trabajo que aplican la línea que finaliza la normalización solicitada. Desafortunadamente, por alguna razóngit reset --hardno deshace estos cambios de normalización de línea.Solución
Las soluciones en las que se restablecen las terminaciones de línea locales no resolverán el problema. Cada vez que git "ve" el archivo, intentará volver a aplicar la normalización, dando como resultado el mismo problema.
La mejor opción es dejar que git aplique la normalización que desea mediante la normalización de todas las terminaciones de línea en el repositorio para que coincida con
.gitattributes, y confirmar esos cambios; consulte Intentar arreglar las terminaciones de línea con git filter-branch, pero no tener suerte .Si realmente desea intentar y revertir los cambios en el archivo manualmente, entonces la solución más fácil parece ser borrar los archivos modificados, y luego decirle a git que los restaure, aunque noto que esta solución no parece funcionar consistentemente al 100% el tiempo ( ADVERTENCIA: ¡NO ejecute esto si sus archivos modificados tienen cambios que no sean terminaciones de línea!):
Tenga en cuenta que, a menos que normalice las terminaciones de línea en el repositorio en algún momento, seguirá encontrándose con este problema.
Causa posible # 2 - Insensibilidad de mayúsculas y minúsculas
La segunda causa posible es la insensibilidad a mayúsculas y minúsculas en Windows o Mac OS / X. Por ejemplo, supongamos que existe una ruta como la siguiente en el repositorio:
/foo/barAhora alguien en Linux compromete archivos
/foo/Bar(probablemente debido a una herramienta de compilación o algo que creó ese directorio) y empuja. En Linux, esto es en realidad ahora dos directorios separados:Verificar este repositorio en Windows o Mac puede resultar en modificaciones
fileAque no se pueden restablecer, porque en cada restablecimiento, git en Windows se desprotege/foo/bar/fileA, y luego porque Windows no distingue entre mayúsculas y minúsculas, sobrescribe el contenido defileAcon/foo/Bar/fileA, lo que hace que se "modifiquen".Otro caso puede ser un archivo (s) individual que existe en el repositorio, que cuando se desprotege en un sistema de archivos que no distingue entre mayúsculas y minúsculas, se superpondría. Por ejemplo:
Puede haber otras situaciones similares que podrían causar tales problemas.
git en sistemas de archivos que no distinguen entre mayúsculas y minúsculas realmente debería detectar esta situación y mostrar un mensaje de advertencia útil, pero actualmente no lo hace (esto puede cambiar en el futuro - vea esta discusión y los parches propuestos relacionados en la lista de correo de git.git).
Solución
La solución es alinear el caso de los archivos en el índice git y el caso en el sistema de archivos de Windows. Esto se puede hacer en Linux que mostrará el verdadero estado de las cosas, O en Windows con la muy útil utilidad de código abierto Git-Unite . Git-Unite aplicará los cambios de caso necesarios al índice git, que luego se puede confirmar en el repositorio.
(1) Probablemente fue alguien que usó Windows, sin ninguna
.gitattributesdefinición para el archivo en cuestión, y que utilizó la configuración global predeterminada para lacore.autocrlfcual esfalse(ver (2)).(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/
fuente
Si otras respuestas no funcionan, intente agregar los archivos y luego reinicie
En mi caso, esto ayudó cuando había un montón de archivos vacíos que Git estaba rastreando.
fuente
$ git add .lugar de$ git add -AOtra causa de esto podría ser sistemas de archivos que no distinguen entre mayúsculas y minúsculas . Si tiene varias carpetas en su repositorio en el mismo nivel cuyos nombres solo difieren según el caso, esto lo afectará. Explore el repositorio de origen utilizando su interfaz web (por ejemplo, GitHub o VSTS) para asegurarse.
Para más información: https://stackoverflow.com/a/2016426/67824
fuente
git ls-tree -r --name-only HEAD | tr A-Z a-z | sort | uniq -dPuede
stasheliminar sus cambios, luego soltar el alijo:fuente
Ninguno de estos métodos funcionó para mí, la única solución fue destruir el repositorio completo y volver a clonarlo. Esto incluye guardar, restablecer, agregar y restablecer, configuraciones de clrf, mayúsculas y minúsculas, etc. Suspiro.
fuente
Ejecute el comando de limpieza :
fuente
.gitattributesarchivos y las terminaciones de línea no eran un problema ya que estoy en una caja de Linux y todos los desarrolladores y nuestro servidor son Linux.Comprueba tu
.gitattributes.En mi caso tengo
*.js text eol=lfen ella y la opción gitcore.autocrlfestabatrue.Me lleva a la situación en la que git convierte automáticamente las terminaciones de línea de mis archivos y me impide arreglarlo e incluso
git reset --hard HEADno hizo nada.Lo solucioné comentando
*.js text eol=lfen mi.gitattributesy lo descomenté después.Parece que solo es magia.
fuente
*.bat text eol=crlfa mi proyecto.Llegué a un problema similar que también involucraba
.gitattributes, pero para mi caso involucraba el LFS de GitHub. Si bien este no es exactamente el escenario del OP, creo que brinda una oportunidad para ilustrar lo que hace el.gitattributesarchivo y por qué puede conducir a cambios no organizados en forma de diferencias "fantasmas".En mi caso, un archivo ya estaba en mi repositorio, como desde el principio de los tiempos. En una confirmación reciente, agregué una nueva
git-lfs trackregla que usaba un patrón que, en retrospectiva, era demasiado amplio y que coincidía con este archivo antiguo. Sé que no quería cambiar este archivo; Sé que no cambié el archivo, pero ahora estaba en mis cambios no organizados y ninguna cantidad de pagos o reinicios duros en ese archivo iba a solucionarlo. ¿Por qué?La extensión GitHub LFS funciona principalmente mediante el aprovechamiento de los ganchos que
gitproporcionan acceso a través del.gitattributesarchivo. En general, las entradas en.gitattributesespecifican cómo se deben procesar los archivos coincidentes. En el caso del OP, se refería a la normalización de las terminaciones de línea; en el mío, era si dejar que LFS maneje el almacenamiento de archivos. En cualquier caso, el archivo real que segitve al calcular ungit diffarchivo no coincide con el archivo que ve cuando lo inspecciona. Por lo tanto, si cambia la forma en que se procesa un archivo a través del.gitattributespatrón que lo coincide, aparecerá como cambios no escalonados en el informe de estado, incluso si realmente no hay ningún cambio en el archivo.Todo lo dicho, mi "respuesta" a la pregunta es que si el cambio en el
.gitattributesarchivo es algo que desea hacer, realmente debería simplemente agregar los cambios y seguir adelante. Si no es así, modifíquelo.gitattributespara representar mejor lo que quiere hacer.Referencias
Especificación de GitHub LFS : excelente descripción de cómo se conectan a las llamadas
cleanysmudgefunciones para reemplazar su archivo en losgitobjetos con un simple archivo de texto con un hash.Documentación de gitattributes : todos los detalles sobre lo que está disponible para personalizar cómo
gitprocesa sus documentos.fuente
Yo tuve el mismo problema. Lo hice
git reset --hard HEADpero aún así cada vez que lo hicegit statusestaba viendo algunos archivos modificados.Mi solución fue relativamente simple. Acabo de cerrar mi IDE (aquí era Xcode) y cerrar mi línea de comando (aquí era terminal en mi Mac OS) e intenté nuevamente y funcionó.
Sin embargo, nunca pude encontrar lo que originó el problema.
fuente
Creo que hay un problema con git para Windows en el que git escribe aleatoriamente las terminaciones de línea incorrectas al finalizar la compra y la única solución es verificar alguna otra rama y obligar a git a ignorar los cambios. Luego revisa la rama en la que realmente quieres trabajar.
Tenga en cuenta que esto descartará cualquier cambio que haya hecho intencionalmente, así que solo haga esto si tiene este problema inmediatamente después del pago.
Editar: podría haber tenido suerte la primera vez. Resulta que me volví a morder después de cambiar de rama. Resultó que los archivos que Git informaba como modificados después de cambiar las ramas estaban cambiando. (Aparentemente porque git no estaba aplicando consistentemente la línea CRLF que terminaba en los archivos correctamente).
Actualicé al último git para Windows y espero que el problema haya desaparecido.
fuente
Problema similar, aunque estoy seguro solo en la superficie. De todos modos, puede ayudar a alguien: lo que hice (FWIW, en SourceTree): guardé el archivo no confirmado, luego hice un restablecimiento completo.
fuente
Como han señalado otras respuestas, el problema se debe a la corrección automática de final de línea. Encontré este problema con los archivos * .svg. Utilicé el archivo svg para los iconos en mi proyecto.
Para resolver este problema, le digo a git que los archivos svg deben tratarse como binarios en lugar de texto agregando la siguiente línea a .gitattributes
* .svg binario
fuente
En una situación similar. Como resultado de muchos años de tormento con muchos programadores que pudieron insertar diferentes codificaciones de los extremos de las líneas (. Asp , .js, .css ... no la esencia) en un solo archivo. Hace algún tiempo rechazó .gitattributes. Configuraciones para repositorio izquierda
autorclf = trueysafecrlf = warn.El último problema surgió al sincronizar desde el archivo con diferentes extremos de líneas. Después de copiar del archivo, en el estado de git muchos archivos se cambian con la nota
The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...Consejos de Cómo normalizar las terminaciones de línea de árbol de trabajo en Git? ayudado
git add -ufuente
Otra posibilidad que encontré fue que uno de los paquetes en el repositorio terminaba con un HEAD separado. Si ninguna de las respuestas aquí ayuda y encuentra un mensaje de estado de git como este, podría tener el mismo problema:
Entrar en la
path/to/packagecarpeta agit statusdebería producir el siguiente resultado:Y el siguiente comando debería solucionar el problema, donde
masterdebería ser reemplazado por su sucursal local:Y recibirá un mensaje de que su sucursal local tendrá algunas cantidades de confirmaciones detrás de la sucursal remota.
git pully deberías estar fuera del bosque!fuente
Por alguna razón
git add .no funcionó , pero
$ git add -A¡funcionó!
fuente