web-dev-qa-db-fra.com

Comment 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.

Je l'ai donc un peu recherché sur Google et j'ai trouvé des gens disant utiliser git mergetool. Mais voici ce que j'ai obtenu:

$ 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?

Et si je veux simplement la version de git pull pour tout écraser?

51
Tim

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

Votre conflit est que vos validations locales ont ajouté un fichier, vision_problem_8.h, qu'un commit distant a également créé, par un renommage 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ées pour vous. L'un d'eux sera le vôtre, un autre sera la version à distance. Vous pouvez utiliser un éditeur ou tout autre outil que vous souhaitez pour résoudre le contenu conflictuel. Lorsque vous avez terminé, git add les fichiers affectés et vous engagez à terminer la fusion.

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


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

24
Phil Miller

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

Essayer:

git mergetool -t gvimdiff

Bien sûr, vous pouvez utiliser votre outil de fusion préféré au lieu du mien gvimdiff, la fusion est également très bien ...

6
mano2a0c40

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 sous le répertoire de travail. Par conséquent, 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
Bluejack

Et si je veux simplement que la version de git pull écrase tout? Si vous voulez juste que vous utilisiez:

 git fetch
 git reset --hard Origin/your-branch-name
2
saferJo