ver modificados log files example commits branches archivos git diff

modificados - git status



El estado de git muestra los archivos cambiados pero git diff no (12)

Respuesta corta

Ejecutar git add veces ayuda.

Ejemplo

El estado de Git muestra los archivos modificados y git diff no muestra nada ...

> git status On branch master 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: package.json no changes added to commit (use "git add" and/or "git commit -a") > git diff >

... ejecutar git add resuelve la incoherencia.

> git add > git status On branch master nothing to commit, working directory clean >

He echado un vistazo a todas las preguntas similares, sin embargo, he verificado que algo extraño está pasando.

En un servidor (Solaris con git 1.8.1) cloné el repositorio de git y luego copié la carpeta .git en mis archivos en vivo existentes. Esto funcionó perfectamente, pude correr

git status

entonces

git diff [filename]

para verificar cualquier archivo que fuera diferente.

En otro servidor (Solaris con git 1.7.6) estoy haciendo exactamente lo mismo, sin embargo

git diff [filename]

no muestra nada, incluso si el contenido del archivo es definitivamente diferente. También probé agregando un nuevo archivo, comprometiéndolo luego editando. El mismo problema, el git status muestra el archivo como cambiado pero git diff no muestra nada. Si descargo el archivo modificado y ejecuto un diff localmente, obtengo una salida diff.


Acabo de correr en un problema similar. git diff file no mostró nada porque agregué un archivo al índice git con una parte de su nombre en mayúsculas: GeoJSONContainer.js . Luego, lo GeoJsonContainer.js a GeoJsonContainer.js y los cambios dejaron de ser rastreados. git diff GeoJsonContainer.js no mostraba nada. Tuve que eliminar el archivo del índice con un indicador de fuerza y ​​agregar el archivo nuevamente:

git rm -f GeoJSONContainer.js git add GeoJSONContainer.js



Hay algunas razones por las cuales el git status puede mostrar una diferencia, pero puede ser que git diff no lo git diff .

  • El modo (bits de permiso) del archivo ha cambiado, por ejemplo, de 777 a 700.

  • El estilo de alimentación de línea cambió de CRLF (DOS) a LF (UNIX)

La forma más sencilla de averiguar qué sucedió es ejecutar git format-patch HEAD^ y ver qué dice el parche generado.


Me encontré con este problema de nuevo. Pero esta vez ocurrió por una razón diferente. Copié archivos en el repositorio para sobrescribir las versiones anteriores. Ahora puedo ver que los archivos están modificados pero diff no devuelve los diffs.

Por ejemplo, tengo un archivo mainpage.xaml. En el Explorador de archivos pegué un nuevo archivo mainpage.xaml sobre el que estaba en mi repositorio actual. Hice el trabajo en otra máquina y simplemente pegué el archivo aquí.

El archivo muestra modificado, pero cuando ejecuto git diff, no mostrará los cambios. Probablemente sea porque la información de archivo en el archivo ha cambiado y git sabe que no es realmente el mismo archivo. Interesante.

Puedes ver que cuando ejecuto diff en el archivo no muestra nada, solo devuelve el mensaje.


Para mí, tenía algo que ver con los permisos de archivos. Alguien con Mac / Linux en mi proyecto parece confirmar algunos archivos con permisos no predeterminados que mi cliente Windows Git no reprodujo. La solución para mí fue decirle a git que ignore los permisos de archivos:

git config core.fileMode false

Otra idea: ¿cómo hago que Git ignore los cambios del modo de archivo (chmod)?


Realmente no has hecho una pregunta real, pero dado que este es un caso de uso general que estoy usando con bastante frecuencia, esto es lo que hago. Puede probar esto usted mismo y ver si el error persiste.

Mi suposición en su caso de uso: tiene un directorio existente que contiene archivos y directorios y ahora desea convertirlo en un repositorio de git que se clona desde otro lugar sin cambiar ningún dato en su directorio actual.

En realidad, hay dos formas.

Clone repo - mv .git - git reset --hard

Este método es lo que hizo: clonar el repositorio existente en un directorio vacío, luego mover el directorio .git al directorio de destino. Para trabajar sin problemas, esto generalmente requiere que luego corras

git reset --hard

Sin embargo, eso cambiaría el estado de los archivos en su directorio actual. Puede probar esto en una copia completa / rsync de su directorio y estudiar qué cambios. Al menos después, ya no deberías ver discrepancias entre el git log y el status .

Init new repo - punto de origen

El segundo es menos perturbador: cd en su destino, y comience un nuevo repositorio con

git init

Luego le dices a ese nuevo repositorio, que tiene un antepasado en otro lugar:

git remote add origin original_git_repo_path

Entonces de manera segura

git fetch origin master

para copiar los datos sin cambiar sus archivos locales. Todo debería estar bien ahora.

Siempre recomiendo la segunda manera de ser menos propenso a errores.


Se encontró con este problema. Mi caso fue similar al problema LESS publicado por @rcwxok.

En mi caso, configuré el entorno PAGER var en PAGER=''less -RSF'' .

Sin embargo, a diferencia de las respuestas anteriores, no quería eliminar la opción -F porque la puse explícitamente allí esperando evitar mostrar la diferencia en less si es más corta que una pantalla.

Para obtener el resultado deseado, en lugar de eliminar -F , agregué -X : PAGER=''less -RSFX'' . Esto resolvió el problema de git diff y además evita mostrar diferencias cortas con less .

Espero que esto ayude a alguien.


Sospecho que hay algo mal con tu instalación de git o tu repositorio.

Intenta ejecutar:

GIT_TRACE=2 git <command>

Vea si obtiene algo útil. Si eso no ayuda, simplemente vence y ve lo que está pasando mal:

strace git <command>


Tuve este mismo problema descrito de la siguiente manera: si escribí

$ git diff

git simplemente volvió al prompt sin ningún error.

Si escribí

$ git diff <filename>

git simplemente volvió al prompt sin ningún error.

Finalmente, leyendo todo, noté que git diff en realidad llama al mingw64 / bin / diff.exe para hacer el trabajo.

Aquí está el trato. Estoy ejecutando Windows y había instalado otra utilidad bash y cambió mi ruta por lo que ya no apuntaba a mi directorio mingw64 / bin .

Entonces, si escribe: git diff y simplemente vuelve al mensaje, puede tener este problema.

El diff.exe real que ejecuta git se encuentra en su directorio mingw64 / bin

Finalmente, para arreglar esto, en realidad copié mi directorio mingw64 / bin a la ubicación en la que git lo estaba buscando. Lo intenté y todavía no funcionó.

Luego, cerré mi ventana de git bash y la abrí de nuevo, fui a mi mismo repositorio que estaba fallando y ahora funciona.

Espero que esto le ayude también.


Tuve un problema donde cientos de terminaciones de línea fueron modificadas por algún programa y git diff enumeró todos los archivos fuente como cambiados. Después de corregir las terminaciones de línea, el estado de git aún mostraba los archivos como modificados.

Pude solucionar este problema agregando todos los archivos para indexar y luego restablecer el índice.

git add -A git reset

core.filemode se configuró en falso.


Tuve un problema similar: git diff mostraría diferencias, pero git diff <filename> no lo haría. Resultó que configuré LESS en una cadena que incluye -F ( --quit-if-one-screen ). Quitar esa bandera resolvió el problema.