Cosa significa quando git dice che un file "necessita di aggiornamento"?


156

Per la vita non riesco a trovare una spiegazione decente del messaggio "[file]: necessita aggiornamento" che a volte git sputa fuori. Anche le FAQ ufficiali di git hanno spiegato questo contrassegnato come TODO. Se qualcuno potesse spiegare A) cosa significa; e B) come risolverlo, sarei estremamente grato.


1
Bella domanda, come hai detto anche il GitFaq non ha una risposta: git.wiki.kernel.org/index.php/…
Justin Ethier,


1
Puoi dire esattamente quale comando produce questo? E quale versione di Git? Ho provato a rimuoverli dall'interfaccia utente, quindi Git recente non dovrebbe dirtelo se non in luoghi che ho dimenticato ;-).
Matthieu Moy,

Risposte:


108

Significa che stai cercando di unire le modifiche da qualche parte, ma le modifiche includono modifiche a un file che è sporco (attualmente modificato nella tua struttura di lavoro). È necessario eseguire il commit delle modifiche in sospeso o nasconderle, estrarre / rebase / unire / qualunque cosa si stia facendo per aggiornare e rimuovere


4
In realtà non è il pull - è l'unione che fa parte del pull. Vedrai lo stesso errore se provi a unire un ramo locale con lo stesso problema e penso che altre operazioni di unione (applica, stash si applicano ...) stampino errori simili se non lo stesso.
Cascabel,

Ah grazie. Questo ha davvero senso. Immagino di aver bisogno di assicurarmi di eseguire il commit delle modifiche prima di effettuare il checkout su un altro ramo.
rofrankel,

7
Nel caso in cui aiuti i risultati della ricerca, ho riscontrato anche questo problema nel tentativo di eseguire una git svn rebasecopia di lavoro sporca. Stash save, rebase, stash pop e tutto andava bene per il mondo.
Adam Tuttle,

1
Il file stesso non può essere modificato - anche la modifica degli attributi del file (come le autorizzazioni) può causare questo.
chiborg,

22

Come altri hanno sottolineato, è necessario che il messaggio di aggiornamento significhi che il file è sporco o, in altre parole, obsoleto. Ma invece di reimpostare e ricominciare tutto da capo, ciò che può essere fatto è semplicemente git statuse quindi git add <file> se è nell'elenco modificato . Perché potresti già aggiungere prima il file, ma poi modificarlo. Questo è successo a me e con questo semplice addho risolto il problema.


7

Accedere al server di produzione / destinazione, cdnella directory contenente l'applicazione ed eseguire questi due comandi.

1. Ripristina alla versione più recente

ATTENZIONE, questo cancellerà tutte le tue modifiche:

git reset --hard HEAD

2. Tirare le modifiche

git pull origin master


1
[git reset --hard HEAD] ha funzionato per me. Avevo eseguito il commit da un'unità di condivisione Windows, ma la mia directory di Ubuntu non rifletteva il commit che avevo appena fatto, anche se era la stessa cartella (Z: mappata su / var / www / html /). Dopo aver eseguito questo, [git status] e [git pull] ora mostrano entrambi che è aggiornato.
Keith DC,

Questa è la soluzione che ha funzionato anche per me. Ho provato a usare git subtree usando SourceTree su Windows, e ha rovinato male il processo.
Artem Russakovskii,

3

Come dice la risposta all'altra domanda collegata, il messaggio significa semplicemente che hai cambiamenti in sospeso. Ottieni anche questo, ad esempio se metti in scena alcuni cambiamenti git add, poi cambi idea e fai git reset HEAD filecon l'intenzione di ricominciare.


2
git reset HEAD filefa apparire lo stesso messaggio
esperto

2

Questo errore può verificarsi quando il processo rebase apporta ulteriori modifiche ai file che non si trovano sul ramo di destinazione.

Per me la parte difficile era con il .gitattributesfile nel mio repository. Il nuovo tipo di file binario è stato aggiunto in un altro ramo ma la sua gestione è stata forzata come file di testo. Quando il file è stato scaricato dal repository da git, le EOL (in realtà sono i byte di valore binario) sono state sostituite - con conseguente differenza binaria.

Aggiunta di una nuova voce per gestire il nuovo tipo di file come binario e riprovare a risolvere l'intero problema.


1

Nel mio caso, ho continuato a ricevere

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Avevo quei file nella mia directory, ma erano stati rinominati nel mio ramo attuale. Quindi, per risolvere, ho corso

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

e mi ha permesso di continuare

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.