Después git reset --hard
, git status
me 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 -a
en 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, autocrlf
se establece en falso en mi global .gitconfig
. ¿Podría ser de alguna manera relevante?
.
significa directorio actual, no directorio raízgit
version ¿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
.gitattributes
archivo. Sin embargo, el tipo de archivo que causó el problema no se especificó en.gitattributes
.Pude resolver el problema simplemente ejecutando
fuente
git rm .gitattributes
elimina .gitattributes del índice.git add -A
agrega 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 --hard
restablece todos los cambios no confirmados, que incluirían la eliminación de .gitattributes. Esencialmente, esto ignora los atributos .gitattributes (y la* text=auto
directiva) 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
.gitattributes
archivo, 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 = false
bajo[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-f
bandera) 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 status
nuevamente.gitattributes
nuevo. Lagit diff
muestra 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 diff
solo muestre cambios en los finales de línea (estos pueden no ser visibles por defecto, intentegit diff | cat -v
ver los retornos de carro como^M
caracteres literales ).Posteriormente, alguien probablemente agregó
.gitattributes
o modificó lacore.autocrlf
configuración para normalizar las terminaciones de línea (2). Basado en la.gitattributes
configuració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 --hard
no 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/bar
Ahora 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
fileA
que 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 defileA
con/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
.gitattributes
definición para el archivo en cuestión, y que utilizó la configuración global predeterminada para lacore.autocrlf
cual 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 -A
Otra 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 -d
Puede
stash
eliminar 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
.gitattributes
archivos 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=lf
en ella y la opción gitcore.autocrlf
estabatrue
.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 HEAD
no hizo nada.Lo solucioné comentando
*.js text eol=lf
en mi.gitattributes
y lo descomenté después.Parece que solo es magia.
fuente
*.bat text eol=crlf
a 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.gitattributes
archivo 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 track
regla 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
git
proporcionan acceso a través del.gitattributes
archivo. En general, las entradas en.gitattributes
especifican 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 segit
ve al calcular ungit diff
archivo 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.gitattributes
patró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
.gitattributes
archivo es algo que desea hacer, realmente debería simplemente agregar los cambios y seguir adelante. Si no es así, modifíquelo.gitattributes
para representar mejor lo que quiere hacer.Referencias
Especificación de GitHub LFS : excelente descripción de cómo se conectan a las llamadas
clean
ysmudge
funciones para reemplazar su archivo en losgit
objetos 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
git
procesa sus documentos.fuente
Yo tuve el mismo problema. Lo hice
git reset --hard HEAD
pero aún así cada vez que lo hicegit status
estaba 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 = true
ysafecrlf = 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 -u
fuente
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/package
carpeta agit status
debería producir el siguiente resultado:Y el siguiente comando debería solucionar el problema, donde
master
deberí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 pull
y deberías estar fuera del bosque!fuente
Por alguna razón
git add .
no funcionó , pero
$ git add -A
¡funcionó!
fuente