Qu'est-ce que cela signifie quand git dit qu'un fichier «doit être mis à jour»?

156

Je ne peux pas pour la vie de moi trouver une explication décente du message "[fichier]: doit être mis à jour" que git crache parfois de temps en temps. Même la FAQ officielle de git explique cela comme un TODO. Si quelqu'un pouvait expliquer A) ce que cela signifie; et B) comment y remédier, je serais extrêmement reconnaissant.

rofrankel
la source
1
Bonne question, comme vous l'avez dit, même le GitFaq n'a pas de réponse: git.wiki.kernel.org/index.php/…
Justin Ethier
1
Pouvez-vous dire exactement quelle commande produit cela? Et quelle version de Git? J'ai essayé de les supprimer de l'interface utilisateur, donc Git récent ne devrait pas vous le dire sauf dans les endroits que j'ai oubliés ;-).
Matthieu Moy

Réponses:

108

Cela signifie que vous essayez de fusionner les modifications de quelque part, mais les modifications incluent des modifications d'un fichier qui est sale (actuellement modifié dans votre arbre de travail). Vous devez valider vos modifications en suspens, ou les cacher, tirer / rebase / fusionner / tout ce que vous faites pour mettre à jour et désinstaller

Michael Mrozek
la source
4
Ce n'est pas vraiment l'attraction - c'est la fusion qui fait partie de l'attraction. Vous verrez la même erreur si vous essayez de fusionner une branche locale avec le même problème, et je pense que d'autres opérations de fusion (appliquer, stash s'appliquent ...) impriment des erreurs similaires sinon la même.
Cascabel
Ah merci. Cela a du sens. Je suppose que je dois m'assurer de valider les modifications avant de retirer une autre branche.
rofrankel
7
Au cas où cela aiderait les résultats de recherche, j'ai également rencontré ce problème en essayant de faire une git svn rebasecopie de travail sale. Sauvegardez, rebase, cachez la pop, et tout allait bien avec le monde.
Adam Tuttle le
1
Le fichier lui-même ne peut pas être modifié - même la modification des attributs de fichier (comme les autorisations) peut en être la cause.
chiborg
22

Comme d'autres l'ont souligné, le message de mise à jour des besoins signifie que le fichier est sale ou, en d'autres termes, obsolète. Mais au lieu de faire une réinitialisation et de tout recommencer, ce qui peut être fait est simplement git statuset ensuite git add <file> si c'est sur la liste modifiée . Parce que vous pouviez déjà ajouter le fichier avant, mais l'avez ensuite modifié. Cela m'est arrivé, et avec ce simple, addj'ai résolu le problème.

Lomza
la source
7

Connectez-vous à votre serveur de production / de destination, cdau répertoire contenant votre application et exécutez ces deux commandes.

1. Réinitialisez à la dernière version

ATTENTION, cela supprimera toutes vos modifications:

git reset --hard HEAD

2. Tirez les modifications

git pull origin master

NXT
la source
1
[git reset --hard HEAD] a fonctionné pour moi. Je m'étais engagé à partir d'un lecteur de partage Windows, mais mon répertoire Ubuntu ne refléterait pas le commit que je venais de faire, même s'il s'agissait du même dossier (Z: mappé à / var / www / html /). Après avoir exécuté ceci, [git status] et [git pull] montrent tous les deux qu'il est à jour.
Keith DC
C'est la solution qui a fonctionné pour moi aussi. J'ai essayé d'utiliser git subtree en utilisant SourceTree sur Windows, et cela a mal tourné dans le processus.
Artem Russakovskii
3

Comme le dit la réponse à l'autre question liée, le message signifie simplement que vous avez des changements en suspens. Vous obtenez également cela, par exemple si vous effectuez des changements avec git add, puis changez d'avis et faites git reset HEAD fileavec l'intention de recommencer.

tripleee
la source
2
git reset HEAD filefait apparaître le même message
expert
2

Cette erreur peut se produire lorsque le processus de rebase apporte des modifications supplémentaires aux fichiers qui ne se trouvent pas sur la branche cible.

Pour moi, la partie la plus délicate était le .gitattributesfichier dans mon dépôt. Un nouveau type de fichier binaire a été ajouté dans une autre branche mais sa gestion a été forcée en tant que fichier texte. Lorsque le fichier a été téléchargé à partir du dépôt par git, les EOL (il s'agit en fait d'octets de valeur binaire) ont été remplacés - ce qui a entraîné une différence binaire.

L'ajout d'une nouvelle entrée pour gérer le nouveau type de fichier en tant que binaire et la relance de l'ensemble du processus ont résolu le problème pour moi.

Procuration
la source
1

Dans mon cas, j'ai continué à

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

J'avais ces fichiers dans mon répertoire, mais ils avaient été renommés dans ma branche actuelle. Alors pour réparer, j'ai couru

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

et ça m'a permis de continuer

ThinkDigital
la source