Perché git non riconosce che il mio file è stato modificato, quindi git add non funziona


97

Sto cercando di inviare i miei file a GitHub usando bash. Sono già presenti e sto caricando una versione più recente con nuove righe e codice, ecc. Ma quando provo git adde poi git statusdice:

Sul master di filiale

niente da impegnare, directory di lavoro pulita

E il file che sto usando è stato appena modificato.


4
se hai già eseguito il commit, non avresti nulla da impegnare, controlla git log.
Grady Player

2
qual è l'output di git diff?
maazza

2
@maazza Non ottengo nulla da git diff
somerandomguy

1
Se git diff(o git status) non mostra nulla ciò spiega perché non c'è niente da aggiungere. Quindi la domanda è davvero: "Perché git non riconosce che il mio file è stato modificato?"
Sunil D.

Scusate ragazzi, vedo cosa sta succedendo. Git non vede che Visual Studio C # l'ha cambiato, ma vede quando qualcos'altro l'ha cambiato, come notepad ++
somerandomguy

Risposte:


123

Ho avuto un problema in cui una volta ho impostato l'indice git su "presumere invariato" sul mio file.

Puoi dire a git di smettere di ignorare le modifiche al file con:

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

Se ciò non aiuta, un ripristino potrebbe essere sufficiente per altri casi strani.


In pratica ho trovato rimuovendo il file memorizzato nella cache e resettandolo per funzionare:

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

Il git rm --cachedmezzo per rimuovere solo il file dall'indice e resetdice a git di ricaricare l'indice git dall'ultimo commit.


15
git add -f path/to/the/fileaggiungerà forzatamente i file per il commit.
San

2
Questa risposta è stata l'unica che mi ha aiutato a risolvere il mio problema. Non sono sicuro che sia una cosa di Windows (non ho mai avuto problemi come questo in passato, né in osx né in linux). Quindi grazie a @ThorSummoner. A proposito, ho provato git add -fil file che si trovava in questo stato "presumi invariato" e non ha funzionato - ho dovuto farlo git update-indexo git rm --cachedseguito da a git resetper farlo funzionare.
rsenna

1
Inoltre, se non sei veramente sicuro dello stato corrente del tuo repo, fai questo: git rm --cached -r .e poi git reset ..
rsenna

C'è un'altra opzione da provare, git update-index --no-skip-worktree path/to/fileè così che ho risolto il mio problema
venerdì

1
Ha funzionato per me, ma sì solo casi di file singoli.
Thomas Cheng

24

Controlla il tuo .gitignorefile . Potresti scoprire che il file, o l'estensione del file o il percorso del file su cui stai tentando di lavorare corrisponde a una voce in .gitignore, il che spiegherebbe perché quel file viene ignorato (e non riconosciuto come file modificato).

Questo si è rivelato il caso per me quando ho avuto un problema simile.


Aggiungi qualche altra spiegazione; questo aiuterà gli altri.
Amit Joshi,

1
Ho usato gitignore.io per generare il mio .gitignore e ho trovato una riga con lib/ciò che fa sì che git ignori questa cartella. Non ci sono problemi con questo, almeno se questa cartella non è la cartella principale del tuo progetto, come quello che è successo a me.
Paladini

E per chiunque nel mio caso, in realtà era il mio file di esclusione globale
vpzomtrrfrt

All'inizio, questo non ha funzionato. Ma l'ho fatto funzionare. Nel mio caso, la cosa da ignorare è stata menzionata due volte nel file gitignore. Cerca sempre tutte le occorrenze e sostituisci tutto.
MasterJoe

8

Come è stato già discusso, i file sono stati probabilmente contrassegnati con "assume-unchanged", che in pratica dice a git che non modificherai i file, quindi non è necessario tenere traccia delle modifiche con essi. Tuttavia, ciò potrebbe influire su più file e, se si tratta di un'area di lavoro di grandi dimensioni, potresti non volerli controllare tutti uno per uno. In tal caso puoi provare: git update-index --really-refresh

secondo i documenti:

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

Fondamentalmente forzerà git a tenere traccia delle modifiche di tutti i file indipendentemente dai flag "assume-invariato".


1
Per me git statusdice che nessun file viene modificato, ma git add .aggiunge due file e git update-index --really-refreshdice che questi due necessitano di aggiornamenti, ma non sembra fare nulla. Qualche idea?
qualcuno con

2
git status ignora i file con flag assume-unchanged. Tuttavia, l'utilizzo di git update-index --really-refresh cancellerà quel flag e i file verranno ora visualizzati. Prova a eseguire di nuovo git status per vedere se ora cambia le modifiche. Se non vedi nulla segui questo post: stackoverflow.com/questions/2363197/… in particolare il comando per visualizzare un elenco di file che hanno i presupposti-nochanges: git ls-files -v | grep '^[[:lower:]]'Se nulla aiuta dovresti creare una domanda con maggiori dettagli in modo che possiamo aiutarti tu.
André Cunha

7

beh, non abbiamo abbastanza per rispondere a questa domanda, quindi ti darò diverse ipotesi:

1) hai nascosto le modifiche, per correggere il tipo: git stash pop

2) hai avuto dei cambiamenti e li hai commessi, dovresti essere in grado di vedere il tuo impegno git log

3) hai fatto delle modifiche in un modo git reset --hardo nell'altro, le tue modifiche potrebbero essere presenti nel reflog, digitare git reflog --allseguito dal check-out o selezionare il ref se mai lo trovi.

4) hai controllato più volte lo stesso repository e sei in quello sbagliato.


1) nessuna scorta trovata 2) Ho avuto modifiche e ho eseguito il commit, quindi posso eseguire nuovamente il commit? 3) Non l'ho fatto 4) Sono nel repo giusto
somerandomguy

se hai apportato modifiche e le hai eseguite, allora sei a posto, vai al passaggio successivo, push o qualunque sia il tuo flusso di lavoro ... Puoi eseguire nuovamente il commit se hai più modifiche, puoi anche git commit --amendinserire le nuove modifiche nell'ultimo commit , non farlo se hai già condiviso il tuo commit.
Grady Player

La chiusura e la riapertura del terminale ha funzionato per me dopo aver pulito un repository di progetto.
Eddie,

6

Sembra pazzesco, ma a volte non sei nel repo giusto anche se pensi di esserlo. Ad esempio, potresti aver spostato la directory principale, ma hai dimenticato di cambiare repository nel tuo editor di testo. O viceversa: sei nel repository giusto nell'editor di testo ma nel repository sbagliato nella riga di comando. Nella prima situazione, apporti le modifiche nel file giusto ma non è la stessa cartella aperta nella riga di comando, quindi in realtà è il file sbagliato. Nella seconda situazione, hai effettivamente modificato il file giusto, ma il tuo git da riga di comando non riconoscerà la modifica perché non sei nella directory corretta sulla riga di comando.


4

È successa una cosa strana come questa. Il plugin git di Eclipse Kepler contrassegnava automaticamente tutte le cartelle del mio progetto come ignorate nella cartella .gitignore.

Quando sarei entrato commitnel Teammenu, sarebbero stati tutti ignorati. Per quanto ne so, questo perché li avevo impostati come derivati ​​nel progetto principale. Deselezionandoli come derviedrisolti. Non l'avevo mai visto prima su Indigo. Spero che aiuti qualcuno.


Qualche idea su come risolvere questo problema quando si verifica in intellij?
MasterJoe

3

Questo è accaduto su Windows durante la modifica dei file trasferendo le differenze tramite lo strumento WinMerge. Apparentemente WinMerge (almeno il modo in cui è configurato sul mio computer) a volte non aggiorna i timestamp dei file che cambia.

Su Windows, git status , utilizza, tra le altre cose, il timestamp di un file e le modifiche alle dimensioni del file per determinare se un file è stato modificato o meno. Quindi, poiché il timestamp non è stato aggiornato, aveva solo la dimensione del file da seguire. Sfortunatamente il file in questione era un semplice file di versione in cui il contenuto cambiava da 7.1.2 a 7.2.0 . In altre parole, anche la dimensione del file è rimasta invariata. Anche altri file che sono stati modificati da WinMerge e che non avevano i loro timestamp aggiornati ma che avevano una dimensione diversa dopo la modifica sono stati rilevati da git status .


3

Ho avuto un problema simile durante l'utilizzo di Sublime Text-3 . Dopo aver apportato nuove modifiche al codice e averlo salvato, quando ho provato i comandi git add ./status la risposta è stata "branch già aggiornato". Ho capito, indipendentemente dal salvataggio degli aggiornamenti nell'editor di testo, il file era effettivamente invariato. L'apertura del file in un altro editor e il salvataggio delle modifiche hanno funzionato per me.


Questo sta accadendo anche a me
Kloar

2

TL; DR; Sei anche nel repository corretto?

La mia storia è un po 'divertente ma ho pensato che potesse accadere con qualcuno che potrebbe avere uno scenario simile, quindi condividilo qui.

In realtà sulla mia macchina, avevo due repository git separati repo1e repo2configurati nella stessa directory root denominata source. Questi due repository sono essenzialmente i repository di due prodotti su cui lavoro dentro e fuori nella mia azienda. Il fatto è che, come linea guida standard, la struttura delle directory del codice sorgente di tutti i prodotti è esattamente la stessa nella mia azienda.

Quindi senza rendermene conto ho modificato un file con lo stesso nome in repo2cui avrei dovuto cambiare repo1. Così, ho continuato comando in esecuzione git statussu repo1e continuava a dare lo stesso messaggio

Sul master di filiale

niente da impegnare, directory di lavoro pulita

per mezz'ora. Quindi un mio collega lo ha osservato come un paio di occhi indipendenti e ha portato questa cosa alla mia attenzione che ero in un archivio sbagliato ma molto simile. Nel momento in cui sono passato a repo1Git ho iniziato a notare i file modificati.

Caso non così comune. Ma non si sa mai!


2

Hai spostato la directory da sotto la shell? Questo può accadere se hai ripristinato il tuo progetto da un backup. Per risolvere questo problema, basta cduscire e rientrare:

cd ../
cd -

Wow, questo è stato il caso. Pazzo. Un altro trucco non ha funzionato affatto!
Makalele

1

In generale, con questo problema, prima controlla di modificare il file che pensi di essere! Ho avuto questo problema durante la modifica di un file JavaScript traspilato invece del file sorgente (la versione traspilata non era sotto il controllo del codice sorgente).


grazie per averlo menzionato! Ero così convinto di aggiornare il file giusto. No. palmo in faccia
Ashley Grenon

1

Il mio client Git (Gitg) mi ha causato questo problema. I normali comandi che normalmente eseguivo non funzionavano. Anche toccare tutti i file nel progetto non ha funzionato.

Ho trovato un modo per risolverlo e non sono ancora sicuro di cosa l'abbia causato. Copia la directory del tuo progetto. I file mancanti verranno visualizzati nelle directory copiate git status. Rinominare potrebbe fare la stessa cosa.


1

Mi sono imbattuto nel problema, ma erano solo due directory e, a me sconosciuto, entrambe le directory sono state configurate come sottomoduli git. Non ho idea di come sia successo, ma il processo è stato quello di seguire alcune delle istruzioni su questo collegamento, ma NON rimuovere la directory (come fa alla fine) ma piuttosto faregit add path/to/dir


1

Quando modifichi un file in Visual Studio, viene elencato in git cambia immediatamente anche se il file non viene salvato. Quindi tutto ciò che devi fare è salvare manualmente il file (Ctrl + S per il file attualmente visualizzato o Ctrl + Maiusc + S per tutti i file di progetto) e git bash li raccoglierà.


Questo ha funzionato per me quando si aggiungono commenti a un .jsfile, lavorando con Visual Studio Code. Grazie.
SnuKies

0

Che tipo di file hai provato a caricare? Ora passo quasi un'ora a caricare la mia modifica css. Ma questo CSS è stato compilato da un file styl quindi git lo ha semplicemente ignorato. Quando ho cambiato la fonte dello stile, tutto ha funzionato.

Spero che sia d'aiuto.


0

A volte dipende e dalla versione di git e se ti dimentichi di farlo git add ..

Per controllare la tua modifica sul repository usa sempre git statusche mostra tutti i file non tracciati e modificati. Perché git diffmostra solo file aggiunti.


0

Assicurati di non creare collegamenti simbolici ( ln -s source dest) dall'interno di Git Bash per Windows.

NON crea collegamenti simbolici, ma esegue una copia PROFONDA del sorgente nella destinazione

Ho sperimentato lo stesso comportamento di OP su un terminale MINGW64 da Git Bash per Windows (versione 2.16.2) per rendermi conto che le mie modifiche `` modificate '' erano effettivamente nella directory originale, e i miei comandi git bash provenivano da una copia profonda che era rimasta invariato.


0

Ho avuto lo stesso problema. È venuto fuori che avevo due copie del progetto e il mio terminale era nella cartella del progetto sbagliata!


0

È successo anche a me, ho provato i metodi sopra menzionati e niente ha aiutato. Quindi la soluzione era cambiare il file tramite terminale, non GUI. Non so perché ha funzionato ma ha funzionato. Dopo aver modificato il file tramite nano dal terminale, git lo ha riconosciuto come modificato e sono stato in grado di aggiungerlo e eseguire il commit.


Hai trovato una soluzione per questo? Ho combattuto con il mio git che non riconosceva i miei file modificati quando utilizzo uno strumento di fusione, e l'unico modo per ottenere git per vedere le modifiche è usare nano per le mie unioni, che richiede molto più tempo. I file in conflitto sono inizialmente visibili a git, e dopo essere stati modificati dallo strumento di unione vengono visualizzati come "invariati" su git.
Lucas P.

non so perché funziona e come funziona ma funziona per me grazie
Amit Bisht

0

Ho lo stesso problema qui VS2015 non ha riconosciuto le modifiche ai file js, la rimozione dei telecomandi dalle impostazioni del repository e quindi l'aggiunta del percorso dell'URL remoto ha risolto il mio problema.


0

Ho avuto un problema simile quando ho creato un file di patch nel server con l'editor vi. Sembra che il problema fosse con la spaziatura. Quando ho inviato la patch dal locale, la distribuzione era corretta.


-1

Ho avuto questo problema. Il mio non funzionava perché stavo mettendo i miei file nella cartella .git all'interno del mio progetto.


-1

Nel mio caso, facendo un git reset --hardfile cancellato e lasciato alcune cartelle vuote. Dopo aver ispezionato il contenuto, ho notato che le directory erano vuote.

Tuttavia git ignora le cartelle vuote. (Correzione, git ignora tutte le directory poiché tiene traccia del contenuto, le cartelle vuote non sono contenuti.)


-4

prova ad usare git add * alloragit commit


1
Benvenuto in SO! Questo probabilmente non risponde alla domanda e ci sono già 9 risposte qui. Per favore, rivolgi i tuoi sforzi a domande a cui è necessario rispondere!
Cris Luengo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.