Comment puis-je résoudre un conflit après git pull?

Je dois résoudre un conflit après un git pull.

$ git pull
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD
Added as vision_problem_8.h~HEAD_1 instead
Removed vignette_generator_cross_square.cc
Automatic merge failed; fix conflicts and then commit the result.

Donc, je l'ai un peu googlé, et j'ai trouvé des gens disant en utilisant git mergetool. Mais voici ce que j'ai eu:

$ git mergetool
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
No files need merging
$ git mergetool opendiff
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff
opendiff: file not found

Cela signifie-t-il que je dois installer quelque chose?

Que faire si je veux simplement que la version de git pull écrase tout?

50
demandé sur Léo Léopold Hertz 준영 2009-09-17 02:05:39

4 réponses

Vous n'avez pas besoin de mergetool pour cela. Il peut être résolu assez facilement manuellement.

Votre conflit est que vos commits locaux ont ajouté un fichier, vision_problem_8.h, qu'un commit distant a également créé, par un renommage à partir de vignette_generator_mashed.h. Si vous exécutez ls -l vision_problem_8.h* vous verrez probablement plusieurs versions de ce fichier que git a conservé pour vous. L'un d'eux sera le vôtre, un autre d'entre eux sera la version à distance. Vous pouvez utiliser un éditeur ou tous les outils que vous aimez pour résoudre le contenu en conflit. Lorsque vous avez terminé, git add les fichiers affectés et commit pour terminer la fusion.

Si vous voulez juste utiliser la version du commit distant, vous pouvez simplement déplacer la copie que vous n'avez pas écrite en place et git add elle.


En ce qui concerne les outils de fusion, jetez un oeil à git help mergetool. Fondamentalement, il va essayer d'exécuter chacune des possibilités incluses jusqu'à ce qu'il en trouve une, ou en utilise une que vous avez explicitement configurée.

24
répondu Phil Miller 2009-09-16 22:49:01

Je pense que vous avez juste oublié le commutateur "- t " sur votre ligne de commande. Selon la page d'aide git, il signifie "- t, --tool= " donc il fait ce que vous vouliez.

Essayez:

git mergetool -t gvimdiff

Bien sûr, vous pouvez utiliser votre outil de fusion préféré au lieu du mien gvimdiff, meld est génial aussi...

6
répondu mano2a0c40 2018-02-09 00:57:21

Si vous exécutez votre fusion à partir d'un sous-répertoire de votre projet, git exécutera la fusion pour l'ensemble de votre projet. Cependant, mergetool ne peut voir (et fusionner) que les fichiers dans ou en dessous du répertoire de travail. Donc, si ce scénario se produit, assurez-vous que vous essayez d'exécuter votre résolution de conflit à partir du répertoire de niveau supérieur de votre projet.

5
répondu Bluejack 2010-02-16 18:52:37

Que faire si je veux simplement que la version de git pull écrase tout? Si vous voulez juste que vous devriez utiliser:

 git fetch
 git reset --hard origin/yourBranchName
0
répondu saferJo 2018-03-23 10:52:07