¿Por qué git no reconoce que mi archivo ha sido cambiado, por lo tanto, git add no funciona?

100

Estoy tratando de enviar mis archivos a github usando bash. Ya están allí, y estoy subiendo una versión más nueva con nuevas líneas y código, etc. Pero cuando lo intento git addy luego git statusdice:

En el maestro de la sucursal

nada que confirmar, directorio de trabajo limpio

Y el archivo que estoy usando se acaba de modificar.

algo al azar
fuente
4
si ya se ha comprometido, entonces no tendría nada que confirmar, verifique git log.
Grady Player
2
¿cuál es la salida de git diff?
maazza
2
@maazza No obtengo nada de git diff
somerandomguy
1
Si git diff(o git status) no muestra nada que explique por qué no hay nada que agregar. Entonces, la pregunta es: "¿Por qué git no reconoce que mi archivo ha sido cambiado?"
Sunil D.
Lo siento chicos, veo lo que está sucediendo. No ve que Visual Studio C # lo cambió, pero ve cuando algo más lo cambió, como
Notepad

Respuestas:

129

Tuve un problema en el que una vez configuré el índice de git para 'asumir sin cambios' en mi archivo.

Puedes decirle a git que deje de ignorar los cambios en el archivo con:

git update-index --no-assume-unchanged path/to/file

Si eso no ayuda, un reinicio puede ser suficiente para otros casos extraños.


En la práctica, encontré eliminar el archivo en caché y restablecerlo para que funcione:

git rm --cached path/to/file
git reset path/to/file

El git rm --cachedmedio para eliminar solo el archivo del índice y resetle dice a git que vuelva a cargar el índice de git desde la última confirmación.

ThorSummoner
fuente
18
git add -f path/to/the/fileagregará a la fuerza los archivos para confirmar.
San
2
Esta respuesta fue la única que ayudó a solucionar mi problema. No estoy seguro si eso es algo de Windows ( nunca he tenido problemas como este en el pasado, ni en osx ni en linux). Así que gracias a @ThorSummoner. Por cierto, probé git add -fel archivo que estaba en este estado de "asumir sin cambios", y no funcionó - tenía que hacerlo git update-indexo git rm --cachedseguido de un git resetpara que funcionara.
rsenna
2
Además, si no está seguro del estado actual de su repositorio, haga esto: git rm --cached -r .y luego git reset ..
rsenna
Hay otra opción para probar, git update-index --no-skip-worktree path/to/fileasí es como resolví mi problema
viernes
1
Me funcionó, pero sí, solo casos de un solo archivo.
Thomas Cheng
24

Revise su .gitignorearchivo . Puede encontrar que el archivo, o la extensión del archivo, o la ruta al archivo con el que está tratando de trabajar coinciden con una entrada .gitignore, lo que explicaría por qué ese archivo se ignora (y no se reconoce como un archivo modificado).

Este resultó ser mi caso cuando tuve un problema similar.

Marc Eliot Stein
fuente
1
He usado gitignore.io para generar mi .gitignore y encontré una línea con lib/, lo que hace que git ignore esta carpeta. No hay ningún problema con eso, al menos si esta carpeta no es la carpeta principal de su proyecto, como lo que me pasó a mí.
Paladini
Y para cualquiera en mi caso, en realidad fue mi
archivo de exclusión
Al principio, esto no funcionó. Pero lo hice funcionar. En mi caso, lo que se debe ignorar se mencionó dos veces en el archivo gitignore. Busque siempre todas las ocurrencias y reemplácelas todas.
MasterJoe
9

Como ya se discutió, los archivos probablemente fueron marcados con "asumir sin cambios", lo que básicamente le dice a git que no modificará los archivos, por lo que no necesita hacer un seguimiento de los cambios con ellos. Sin embargo, esto puede estar afectando a varios archivos y, si se trata de un espacio de trabajo grande, es posible que no desee comprobarlos todos uno por uno. En ese caso, puede probar: git update-index --really-refresh

de acuerdo con los documentos:

Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.

Básicamente, obligará a git a realizar un seguimiento de los cambios de todos los archivos, independientemente de los indicadores "asumir sin cambios".

André Cunha
fuente
2
Para mí, git statusdice que no se cambian los archivos, pero git add .agrega dos archivos, y git update-index --really-refreshdice que esos dos necesitan actualizaciones, pero no parece hacer nada. ¿Alguna idea?
someonewithpc
2
git status ignora los archivos con el indicador de asumir sin cambios. Sin embargo, el uso de git update-index --really-refresh borrará esa marca y los archivos ahora aparecerán. Intente ejecutar git status nuevamente para ver si ahora cambia los cambios. Si no ve nada, siga esta publicación: stackoverflow.com/questions/2363197/… lo más notable es el comando para mostrar una lista de archivos que tienen el supuesto-nochanges: git ls-files -v | grep '^[[:lower:]]'Si nada ayuda, debe crear una pregunta con más detalles para que podamos ayudar tú.
André Cunha
8

Suena loco, pero a veces no estás en el repositorio correcto aunque creas que lo estás. Por ejemplo, es posible que haya movido el directorio principal, pero olvidó cambiar de repositorio en su editor de texto. O viceversa: estás en el repositorio correcto en el editor de texto pero en el repositorio incorrecto en la línea de comandos. En la primera situación, realiza sus ediciones en el archivo correcto , pero no es la misma carpeta que está abierta en su línea de comando, por lo que en realidad es el archivo incorrecto. En la segunda situación, en realidad editó el archivo correcto, pero su línea de comando git no reconocerá el cambio porque no está en el directorio correcto en la línea de comando.

Monroe Mann
fuente
7

bueno, no tenemos suficiente para responder a esta pregunta, así que te daré varias conjeturas:

1) guardó sus cambios, para corregir el tipo: git stash pop

2) tuvo cambios y los cometió, debería poder ver su compromiso en git log

3) git reset --hardTuviste cambios hechos de alguna manera , tus cambios pueden estar allí en el reflog, escribe git reflog --allseguido de verificar o seleccionar la referencia si alguna vez la encuentras.

4) ha revisado el mismo repositorio varias veces y está en el incorrecto.

Grady Player
fuente
1) no se encontró ningún alijo 2) Tuve cambios y me comprometí, así que ¿puedo comprometerme de nuevo? 3) No hice eso 4) Estoy en el repositorio correcto
somerandomguy
si tuvo cambios y los comprometió, entonces está bien, vaya al siguiente paso, presione o cualquiera que sea su flujo de trabajo ... Puede confirmar nuevamente si tiene más cambios, incluso git commit --amendpuede poner sus nuevos cambios en su última confirmación , no hagas eso si ya has compartido tu compromiso.
Grady Player
Cerrar y reabrir la terminal lo hizo por mí después de limpiar un repositorio de proyectos.
Eddie
4

Ha pasado algo raro como esto. El complemento git de Eclipse Kepler marcaba automáticamente todas las carpetas de mi proyecto como ignoradas en la carpeta .gitignore.

Cuando me llegó a commiten el Teammenú, todos ellos se vuelve a establecer en ignorado. Por lo que puedo decir, esto se debió a que los configuré como derivados en el proyecto principal. Desmarcarlos como derviedsolucionó esto. Nunca había visto esto antes en Indigo. Espero que ayude a alguien.

Joseph Lust
fuente
¿Alguna idea de cómo se puede solucionar este problema cuando ocurre en intellij?
MasterJoe
3

TL; DR; ¿Estás siquiera en el repositorio correcto?

Mi historia es un poco divertida, pero pensé que podría suceder con alguien que podría estar pasando por una situación similar, así que la comparto aquí.

En realidad, en mi máquina, tenía dos repositorios git separados repo1y los repo2configuré en el mismo directorio raíz llamado source. Estos dos repositorios son esencialmente los repositorios de dos productos con los que trabajo intermitentemente en mi empresa. Ahora bien, la cuestión es que, como pauta estándar, la estructura de directorios del código fuente de todos los productos es exactamente la misma en mi empresa.

Entonces, sin darme cuenta, modifiqué exactamente un archivo con el mismo nombre en el repo2que se suponía que debía cambiar repo1. Por lo tanto, no dejé de sistema que se ejecuta git statusen repo1Y siguió dando el mismo mensaje

En el maestro de la sucursal

nada que confirmar, directorio de trabajo limpio

durante media hora. Luego, un colega mío lo observó como un par de ojos independientes y me hizo notar que estaba en un repositorio equivocado pero de aspecto muy similar. En el momento en que repo1cambié a Git, comencé a notar los archivos modificados.

Caso no tan común. ¡Pero nunca se sabe!

RBT
fuente
3

Esto sucedió en Windows al cambiar archivos al transferir diferencias a través de la herramienta WinMerge. Aparentemente, WinMerge (al menos la forma en que está configurado en mi computadora) a veces no actualiza las marcas de tiempo de los archivos que cambia.

En Windows, git status usa, entre otras cosas, la marca de tiempo de un archivo y cambios en el tamaño del archivo para determinar si un archivo ha cambiado o no. Entonces, dado que la marca de tiempo no se actualizó, solo tenía el tamaño del archivo para pasar. Desafortunadamente, el archivo en cuestión era un archivo de versión simple donde el contenido cambió de 7.1.2 a 7.2.0 . En otras palabras, el tamaño del archivo tampoco se modificó. Otros archivos que también fueron cambiados por WinMerge y no tenían sus marcas de tiempo actualizadas pero tenían un tamaño diferente después de que el cambio fue detectado por git status sin problemas .

antred
fuente
3

Tuve un problema similar mientras usaba Sublime Text-3 . Después de hacer nuevos cambios en el código y guardarlo, cuando probé los comandos git add ./status, la respuesta fue "rama ya actualizada". Me di cuenta de que, independientemente de guardar las actualizaciones en el editor de texto, el archivo no había cambiado. Abrir el archivo en otro editor y guardar los cambios funcionó para mí.

Balraj Gill
fuente
Esto también me está pasando a mí
Kloar
2

¿Sacaste el directorio de debajo de tu shell? Esto puede suceder si restauró su proyecto desde una copia de seguridad. Para solucionar este problema, solo cdsalga y vuelva a entrar:

cd ../
cd -
SilverWolf - Reincorporar a Monica
fuente
Vaya, este fue el caso. Loco. ¡Otros trucos no funcionaron en absoluto!
Makalele
1

En general, con este problema, primero verifique que está editando el archivo que cree que está. Tuve este problema cuando estaba editando un archivo JavaScript transpilado en lugar del archivo fuente (la versión transpilada no estaba bajo el control de la fuente).

Chris Halcrow
fuente
¡Gracias por mencionar esto! Estaba tan convencido de que estaba actualizando el archivo correcto. No palma de la cara
Ashley Grenon
1

Mi cliente de Git (Gitg) me causó este problema. Los comandos normales que normalmente ejecutaría no funcionaban. Incluso tocar todos los archivos del proyecto no funcionó.

Encontré una manera de solucionarlo y todavía no estoy seguro de qué lo causó. Copie el directorio de su proyecto. Los archivos faltantes aparecerán en el directorio copiado git status. Cambiar el nombre podría hacer lo mismo.

kagronick
fuente
1

Me encontré con el problema, pero eran solo dos directorios y no sabía que ambos directorios terminaron configurados como submódulos git. No tengo ni idea de cómo sucedió eso, pero el proceso fue seguir algunas de las instrucciones de este enlace, pero NO eliminar el directorio (como lo hace al final), sinogit add path/to/dir

Andrew Lank
fuente
1

Cuando edita un archivo en Visual Studio, aparece en la lista de cambios de git instantáneamente, incluso si el archivo no se guarda. Entonces, todo lo que necesita hacer es guardar el archivo manualmente (Ctrl + S para el archivo que se muestra actualmente o Ctrl + Shift + S para todos los archivos del proyecto) y git bash los recogerá.

yaugenka
fuente
Esto funcionó para mí al agregar comentarios a un .jsarchivo, trabajando con Visual Studio Code. Gracias.
SnuKies
0

¿Qué tipo de archivo intentaste cargar? Ahora solo dedico casi una hora a cargar mi modificación css. Pero este CSS compilado a partir de un archivo de estilo, por lo tanto, git simplemente lo ignoró. Cuando cambié la fuente de estilo, todo funcionó.

Espero eso ayude.

Paxi
fuente
0

A veces depende y por versión de git y si te olvidas de hacerlo git add ..

Para verificar su cambio en el repositorio, use siempre git statusque muestre todos los archivos sin seguimiento y modificados. Porque git diffmuestra solo archivos agregados.

onalbi
fuente
0

Asegúrese de no crear enlaces simbólicos ( ln -s source dest) desde dentro de Git Bash para Windows.

NO hace enlaces simbólicos, pero hace una copia PROFUNDA de la fuente al destino

Experimenté el mismo comportamiento que OP en una terminal MINGW64 de Git Bash para Windows (versión 2.16.2) para darme cuenta de que mis cambios 'editados' en realidad estaban en el directorio original, y mis comandos git bash provenían de una copia profunda que había quedado sin alterar.

StevenWernerCS
fuente
0

Yo tuve el mismo problema. ¡Resulta que tenía dos copias del proyecto y mi terminal estaba en la carpeta del proyecto incorrecta!

zar
fuente
0

A mí también me pasó, probé los métodos mencionados anteriormente y nada ayudó. Entonces, la solución fue cambiar el archivo a través de la terminal, no la GUI. No sé por qué esto funcionó, pero funcionó. Después de editar el archivo a través de nano desde la terminal, git lo reconoció como cambiado y pude agregarlo y confirmarlo.

Zed895
fuente
¿Ha encontrado una solución para esto? He estado luchando con mi git al no reconocer mis archivos modificados cuando uso cualquier herramienta de fusión, y la única forma de que git vea los cambios es usando nano para mis fusiones, lo que lleva mucho más tiempo. Los archivos en conflicto son inicialmente visibles para git, después de que son editados por la herramienta de fusión, se muestran como "sin cambios" en git.
Lucas P.
No sé por qué funciona esto y cómo funciona, pero funciona para mí gracias
Amit Bisht
0

Tengo el mismo problema aquí VS2015 no reconoció los cambios de mis archivos js, eliminando los controles remotos de la configuración del repositorio y luego volviendo a agregar la ruta URL remota resolvió mi problema.

Muzafar Hasan
fuente
0

Tuve un problema similar cuando creé un archivo de parche en el servidor con el editor vi. Parece que el problema fue el espaciado. Cuando envié el parche desde local, la implementación fue adecuada.

Pkrishna
fuente
-1

Tuve este problema. El mío no funcionaba porque estaba poniendo mis archivos en la carpeta .git dentro de mi proyecto.

Lafsnb
fuente
-2

En mi caso, hacer un git reset --hardarchivo eliminado y dejar algunas carpetas vacías. Después de inspeccionar el contenido, noté que los directorios estaban vacíos.

Sin embargo, git ignora las carpetas vacías. (Corrección, git ignora todos los directorios ya que rastrea el contenido, las carpetas vacías no son contenido).

basura polvorienta
fuente
-4

intenta usar git add * entoncesgit commit

Tih Haur
fuente
1
¡Bienvenido a SO! Es probable que esto no responda a la pregunta, y ya hay 9 respuestas aquí. ¡Por favor, dirija sus esfuerzos a las preguntas que necesitan respuesta!
Cris Luengo