Git résoudre les conflits en utilisant --le nôtre/ -- le leur pour tous les fichiers

y a-t-il un moyen de résoudre les conflits pour tous les fichiers en utilisant la commande --ours et --theirs ? Je sais que vous pouvez le faire pour des fichiers individuels, mais ne pouvait pas trouver un moyen de le faire pour tous.

76
demandé sur exe163 2014-07-14 22:57:54

5 réponses

passe simplement dans le répertoire de travail et envoie la sortie par la commande xargs:

grep -lr '<<<<<<<' . | xargs git checkout --ours

ou

grep -lr '<<<<<<<' . | xargs git checkout --theirs

comment cela fonctionne: grep va rechercher dans tous les fichiers du répertoire courant (le . ) et des sous-répertoires récursivement (le drapeau -r ) à la recherche de marqueurs de conflit (la chaîne '<<<<<<<')

le drapeau -l ou --files-with-matches ne fait sortir que le grep le nom de fichier où la chaîne a été trouvée. La numérisation s'arrête après la première correspondance, donc chaque fichier apparié n'est sorti qu'une seule fois.

les noms de fichiers appariés sont alors piped à xargs , un utilitaire qui décompose le flux d'entrée pipé en arguments individuels pour git checkout --ours ou --theirs

Plus à ce lien .

car ce serait très incommode pour taper cette chaque fois à la ligne de commande, si vous vous trouvez en utilisant un lot, il serait peut-être pas une mauvaise idée de créer une alias de votre shell de choix: Bash est l'habituel.

cette méthode doit fonctionner au moins avec les versions Git 2.4.x

67
répondu Dmitri 2015-08-31 18:41:12

Vous pouvez -Xours ou -Xtheirs avec git merge . So:

  1. annuler la fusion actuelle (par exemple avec git reset --hard HEAD )
  2. fusionner en utilisant la stratégie que vous préférez ( git merge -Xours ou git merge -Xtheirs )

clause de non-responsabilité: Bien sûr, vous pouvez choisir une seule option , soit -Xours ou -Xtheirs , utilisez une stratégie différente, vous devriez bien sûr aller dossier par dossier.

Je ne sais pas s'il y a un moyen pour checkout , mais je ne pense pas honnêtement qu'il est terriblement utile: sélectionner la stratégie avec la commande checkout est utile si vous voulez des solutions différentes pour les fichiers différents, sinon, allez juste pour l'approche de stratégie de fusion.

33
répondu ThanksForAllTheFish 2015-06-04 14:35:19

git checkout --[ours/theirs] . fera ce que vous voulez, tant que vous êtes à la racine de tous les conflits. Notre / la leur affecte seulement les fichiers non fusionnés de sorte que vous ne devriez pas avoir à grep/find/etc conflits spécifiquement.

26
répondu Cory Petosky 2016-01-07 20:49:53
git diff --name-only --diff-filter=U | xargs git checkout --theirs

Semble faire le travail. Notez que vous devez être cd'ed dans le répertoire racine du git repo pour y arriver.

11
répondu Peter 2017-09-12 12:56:44

dans le cas où quelqu'un d'autre cherche simplement à écraser tout d'une branche (dire Maître) avec le contenu d'une autre, il y a un moyen plus facile:

git merge master --strategy=ours

merci à https://stackoverflow.com/a/1295232/560114

ou à l'inverse, voir y a-t-il une version" à eux "de"git merge-ours"?

-1
répondu Matt Browne 2018-07-31 17:14:53