web-dev-qa-db-fra.com

Comment résoudre TOUS les conflits en utilisant HEAD, avec n’importe quel outil mergetool

Donc, pour une raison quelconque, je rencontre de nombreux conflits avec un nouveau correctif logiciel fusionné. Le fichier qui a été modifié manuellement [manuellement] ne présente pas de conflit. Tous les conflits se trouvent dans des fichiers qui n'ont pas été modifiés pendant le correctif et qui semblent être liés à des espaces. Je vais essayer de comprendre ce problème plus tard, mais je dois maintenant fusionner le correctif et le déployer.

Comment résoudre TOUS les conflits pour utiliser la version HEAD? Je ne veux pas aller fichier par fichier. Oui, je sais que c’est une mauvaise pratique, mais les conflits sont tous des espaces et je sais que HEAD est correct: réussir tous les tests et fonctionner correctement en production. 

Des idées? 

J'utilise OSX.

15
leonsas
git merge -Xours Origin/master

fusionnera avec Origin/master (la même chose que git pull Origin master) et résoudra tous les conflits en prenant les versions de votre branche locale.

Si vous êtes déjà à mi-chemin de la mauvaise fusion, vous pouvez tout réinitialiser en tête avec git reset --hard HEAD.

Dans ce cas, vous devriez faire

git reset --hard HEAD
git merge -Xours Origin/master

Et cela devrait régler votre problème!

(mérite également d'être mentionné, -Xtheirs fera la même chose, mais prenons la version amont dans tout conflit.)


De plus, les conflits sont probablement dus au fait que la version en amont utilise des fins de ligne de style Windows et que tout programme dans lequel vous avez modifié les fichiers sur votre ordinateur local utilise des fins de ligne de style mac ou de style linux.

Il y a des options que vous pouvez définir dans git pour toujours valider les fins de ligne de style windows ou linux, mais de toujours extraire mac-style ou linux-style dans votre répertoire de travail.

Voir ce lien pour plus d’informations: https://help.github.com/articles/dealing-with-line-endings

38
NHDaly

Je voudrais:

$ git checkout master   # or where ever you want to merge the hotfix into
$ git merge --no-commit -Xours <hotfix-branch>
$ git status    # make sure the only change is the file you wanted
$ git diff      # make sure they changes are what you wanted
$ git commit -m "<your merge message"

Ceci utilisera le pull de stratégie récursif par défaut dans tous les fichiers non en conflit, mais résoudra tous les fichiers en conflit en utilisant simplement la version maître/HEAD. Les docs:

$ git merge --help
....

   recursive
       ... This is the default merge strategy when pulling or merging one branch.

       The recursive strategy can take the following options:

       ours
           This option forces conflicting hunks to be auto-resolved cleanly
           by favoring our version. Changes from the other tree that do not
           conflict with our side are reflected to the merge result. ....
4
Bert F

Si vous avez un conflit sur votre branche locale, vous pouvez simplement exécuter ces commandes:

git checkout --conflict=merge .
git checkout --ours .

Pour résoudre les conflits en utilisant votre branche locale.

2
Yametekudasai