Forcer Git à toujours choisir la version la plus récente lors d'une fusion?

103

Supposons que je mergegit et qu'il y ait un conflit de fusion.

Ma question est: comment puis-je forcer git à toujours choisir la version la plus récente du code en conflit pour ne pas avoir à résoudre le conflit à la main?

Bartek
la source
mais je veux faire une fusion (pas remplacer les commits), mais en plus pour résoudre les conflits automatiquement.
bartek

Réponses:

188

Ce n'est pas exactement la version "plus récente", mais vous pouvez dire à git de toujours préférer la version sur la branche actuelle en utilisant git merge branch -X ours, ou de préférer la version de la branche fusionnée, en utilisant git merge branch -X theirs.

De man git-merge:

les notres:

Cette option oblige les morceaux en conflit à être résolus automatiquement en favorisant notre version. Les modifications de l'autre arbre qui n'entrent pas en conflit avec notre côté sont reflétées dans le résultat de la fusion. Pour un fichier binaire, tout le contenu est pris de notre côté.

les leurs:

C'est le contraire du «nôtre».

Renato Zannon
la source
9
ours- theirs!! Dites-le simplement et vous comprendrez ce que fait la commande! J'adore Git! : D
Haywire
14
Remarque: si vous l'avez déjà utilisé git merge branch, vous devrez le faire git merge --abortavant de pouvoir le faire.
John Dvorak
1
Ça ne marche pas pour moi. Il abandonne toujours la fusion. error: The following untracked working tree files would be overwritten by merge:Je ne sais même pas pourquoi ces fichiers sont dans cette branche en premier lieu, mais ils devraient être écrasés et git refuse.
mcv
2
S'ils ne sont pas suivis, vous devez d'abord les supprimer (ou git add). Lisez un peu git clean, cela peut vous aider.
Renato Zannon
Après avoir exécuté git merge ours, s'il y a des fichiers de conflit, y aura-t-il un journal? et pourrais-je suivre le de git merge ours?
zx1986
19

Je l'utilise,

git fetch --prune
git reset --hard origin/master
Wolfgang
la source
2
Cette solution m'a aidé à résoudre les conflits non fusionnés alors que tout ce que je voulais était de remplacer avec la branche principale. j'ai utilisé git reset --hard master (de local)
Juan Mendez