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.
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
Vous pouvez -Xours
ou -Xtheirs
avec git merge
. So:
- annuler la fusion actuelle (par exemple avec
git reset --hard HEAD
) - fusionner en utilisant la stratégie que vous préférez (
git merge -Xours
ougit 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.
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.
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.
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"?