git - erreurs après les conflits de fusion au cours de stash pop
Titre Original: git - mise à jour de tous les fichiers qui n'ont pas été modifiées
Actuellement, je suis en train de mettre à jour tous les fichiers dans un dépôt git qui n'ont pas été modifiées. Disons par exemple 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 l'a restauré mes modifications, de me donner un avertissement que j'ai besoin de fusionner test1.py
. So far So good. Le problème se pose lorsque j'essaie de faire le même processus encore une fois (après les deux fichiers ont été de nouveau changé remotly). Git dit maintenant
unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state
qui me rend un peu triste. Il veux juste une chose simple: mettre à Jour tous les fichiers que je n'ai pas changé. Je vais prendre soin de fusion plus tard.
- Encore une remarque: avec Git, vous n'avez pas vraiment briser s'engage. Lorsque vous tirez, vous obtenez toutes les modifications, si vous avez modifié ces fichiers, ou pas. Après avoir appliqué (pop) votre planqué changements, vous vous retrouvez avec la combinaison de ces changements (par l'intermédiaire d'une fusion, les coulisses). Votre objectif de mettre à jour uniquement les fichiers que vous n'avez pas changé n'a pas vraiment beaucoup de sens.
Vous devez vous connecter pour publier un commentaire.
Vous résolu le conflit dans votre fichier (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, si il vous permet de vous déplacer et que vous n'avais pas réellement résolu, on pouvait trouver toutes sortes de façons de se tirer dans le pied.)
Autant que je sache, la façon de le faire est:
Il semble qu'il devrait y avoir un moyen de faire les deux à la fois avec
update-index
mais il n'est pas évident pour moi d'un coup d'œil rapide. (Mais encore une fois, pour de véritables conflits de fusion, vous jamais voulez marquer un conflit résolu sans mise en scène du contenu, c'est juste pour caches que cette question se pose.)Et comme VonC dit dans sa réponse, si cela arrive de nouveau, vous peut facilement voir que les choses avaient conflits de fusion lors de l'application de la cachette à l'aide de
git status
. Ils seront énumérés dans le rouge (si vous avez de la couleur) et direunmerged
(ou peut-êtredeleted by us/them
si c'était un supprimer/modifier des conflits).Note de bas de page: en Regardant en arrière à votre question, je ne peux pas vraiment dire si vous les conflits résolus ou non - que vous venez de dire "so far so good." La "avertissement" vous avez vu qui est vraiment conçu comme une suggestion pour résoudre les conflits immédiatement. Les conflits ont surgi lors de la tentative de combiner les changements que vous avez fait avec les modifications qui vous avait planqué. Vous avez à résoudre ce conflit et de faire de l'arbre dans un état cohérent avant que vous pouvez déplacer en aucune façon. Traiter avec elle comme vous le feriez à un conflit de fusion - regardez dans le fichier, recherchez les marqueurs de conflit, comprendre ce contenu afin de le garder! (Et puis regarde en arrière, au-dessus de la façon d'en finir.)
git stash pop
encore, mais il ne fonctionne toujours pas. Maintenant, il dit: "erreur: Votre des modifications locales les fichiers suivants seraient remplacées par de fusion: <fichier>"git checkout -f <file>
, qui (attention!) jette tout changement local.Qui devrait signifier votre deuxième cachette ne travaille pas pour cause de non encore résolus de fusion.
Voir ce DONC, la question qui illustre le même message d'erreur sur une cachette.
Ce thread confirme qu'un arbre ne peut pas contenir de fichiers non mergés.