git - erreurs après les conflits de fusion au cours de stash pop

titre Original: git - update tous les fichiers qui n'ont pas été modifiés""

actuellement, j'essaie de mettre à jour tous les fichiers d'un dépôt git qui n'ont pas été modifiés. Disons par exemple que j'ai:

  • test1.py
  • test2.py

test1.py a été modifié localement alors que les deux fichiers ont été modifiés à distance. Maintenant j'ai essayé:

git stash
git pull
git stash pop

qui restauré mes changements, me donnant un avertissement que je dois fusionner test1.py . So far So good. Le problème se pose lorsque j'essaie de refaire le même processus (après que les deux fichiers aient été changés à distance). Git now dit

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state

ce qui me rend un peu triste. Il suffit de vouloir une chose simple: mettre à jour tous les fichiers que je n'ai pas changé. Je m'occuperai de la fusion plus tard.

21
demandé sur Cascabel 2011-05-13 22:56:25

2 réponses

vous avez résolu le conflit dans votre dossier (peut-être? voir note de bas de page), mais Git ne sais pas si vous êtes fait ou pas. Vous devez indiquer à git que vous avez fini de régler ce conflit. (Sinon, s'il vous permet de passer à autre chose et que vous ne l'aviez pas résolu, vous pourriez trouver toutes sortes de façons de vous tirer dans le pied.)

autant Que je sache, la façon de le faire est:

git add <file>        # stage the resolved version, which marks it as resolved
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree

il semble qu'il devrait y avoir un moyen de faire les deux à une fois avec update-index mais ce n'est pas évident pour moi d'un coup d'oeil rapide. (Mais encore une fois, pour les conflits de fusion réels, vous jamais veulent marquer un conflit comme résolu sans mettre en scène le contenu; c'est juste pour les cachettes que cela se pose.)

et comme le dit VonC dans sa réponse, si cela devait se reproduire, vous pouvez facilement voir ce que les choses ont eu des conflits de fusion lors de l'application de la cachette en utilisant git status . Ils seront listés en rouge (si vous avez la couleur sur) et dire unmerged (ou peut-être deleted by us/them s'il s'agit d'un conflit supprimer/modifier).

note de bas de page: en regardant en arrière à votre question, Je ne peux pas réellement dire si vous avez corrigé les conflits ou pas - vous venez de dire "jusqu'ici si bon."L '"avertissement" que vous avez vu est vraiment une suggestion pour résoudre les conflits immédiatement. Les conflits ont surgi en essayant de combiner les changements que vous avez tirés avec les changements que vous aviez planqués. Vous devez résoudre ce conflit et obtenir votre arbre de travail dans un état cohérent avant que vous pouvez déplacer en aucune façon. Traitez - le comme vous le feriez pour un conflit de fusion - regardez dans le fichier, trouvez les marqueurs de conflit, trouvez quel contenu conserver! (Puis regardez au-dessus pour savoir comment finir.)

27
répondu Cascabel 2011-05-13 21:47:17

ça veut dire que votre deuxième planque ne marche pas à cause d'une fusion non résolue.

Voir ce SO question qui illustre le même message d'erreur sur une cachette.

ce "thread 151980920" confirme qu'un arbre ne peut pas contenir de fichiers non fusionnés.

vous avez un arbre avec des entrées non fusionnées.

Pourquoi ne pas étudier le problème et de le résoudre?

Un simple " git status " devrait vous montrer ce que sont les entrée. Un simple coup d'oeil à ces fichiers devrait vous montrer les marqueurs de conflit.

résoudre le problème, s'engager, continuer.

2
répondu VonC 2017-05-23 12:07:40