Existe-t-il un moyen de résoudre les conflits pour tous les fichiers en utilisant l'extraction --ourset --theirs? Je sais que vous pouvez le faire pour des fichiers individuels mais que vous n'avez pas trouvé de moyen de le faire pour tous.
Existe-t-il un moyen de résoudre les conflits pour tous les fichiers en utilisant l'extraction --ourset --theirs? Je sais que vous pouvez le faire pour des fichiers individuels mais que vous n'avez pas trouvé de moyen de le faire pour tous.
Réponses:
Il suffit de grep dans le répertoire de travail et d'envoyer la sortie via la commande xargs:
grep -lr '<<<<<<<' . | xargs git checkout --ours
ou
grep -lr '<<<<<<<' . | xargs git checkout --theirs
Comment cela fonctionne: greprecherchera dans tous les fichiers du répertoire courant (le .) et des sous-répertoires de manière récursive (le-r drapeau) à la recherche de marqueurs de conflit (la chaîne '<<<<<<<')
l' indicateur -lou --files-with-matchesoblige grep à afficher uniquement le nom de fichier où la chaîne a été trouvée. L'analyse s'arrête après la première correspondance, de sorte que chaque fichier correspondant n'est sorti qu'une seule fois.
Les noms de fichiers correspondants sont ensuite redirigés vers xargs , un utilitaire qui divise le flux d'entrée canalisé en arguments individuels pour git checkout --oursou--theirs
Plus sur ce lien .
Comme il serait très gênant de devoir taper ceci à chaque fois sur la ligne de commande, si vous vous retrouvez à l'utiliser beaucoup, ce n'est peut-être pas une mauvaise idée de créer un alias pour le shell de votre choix: Bash est celui habituel .
Cette méthode devrait fonctionner avec au moins les versions 2.4.x de Git
git diff --name-only --diff-filter=U.
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]. Plus rapide que grepping si vous avez un gros projet.
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours].
Vous pouvez -Xoursou -Xtheirsavec git mergeaussi. Alors:
git reset --hard HEAD)git merge -Xoursou git merge -Xtheirs)AVERTISSEMENT: Bien sûr , vous pouvez choisir qu'une seule option, que ce soit -Xoursou -Xtheirs, ne pas utiliser autre stratégie que vous devez d'aller bien sûr fichier par fichier.
Je ne sais pas s'il existe un moyen pour checkout, mais je ne pense pas honnêtement que ce soit terriblement utile: la sélection de la stratégie avec la commande d'extraction est utile si vous voulez des solutions différentes pour différents fichiers, sinon optez simplement pour l'approche de la stratégie de fusion.
--theirsou --ours-Option pour git v1.9.4. Une approche serait git merge -s recursive -Xtheirs BRANCH.
--theirset --oursne sont pas disponibles non plus avec git 2.2.0. Soit ma réponse n'était pas précise, soit ils étaient disponibles dans une version plus ancienne de git (cette réponse est assez ancienne à l'époque informatique). La bonne approche est avec -X. Je mets à jour en conséquence
git checkout --[ours/theirs] .fera ce que vous voulez, tant que vous êtes à l'origine de tous les conflits. le nôtre / le leur n'affecte que les fichiers non fusionnés donc vous ne devriez pas avoir à grep / find / etc conflits spécifiquement.
error: path 'foo/bar/blah' does not have our version.
git diff --name-only --diff-filter=U | xargs git checkout --theirs
Semble faire le travail. Notez que vous devez être connecté au répertoire racine du dépôt git pour y parvenir.
Au cas où quelqu'un d'autre cherche simplement à écraser tout ce qui se trouve dans une branche (par exemple master) par le contenu d'une autre, il existe un moyen plus simple:
git merge origin/master --strategy=ours
Merci à https://stackoverflow.com/a/1295232/560114
Ou pour l'inverse, voir Y a - t-il une version "leur" de "git merge -s nôtre"?
git checkout --ours -- .marche? Le.signifie le répertoire courant, lorsqu'il est appliqué à partir de la racine du répertoire de travail, donc cela signifie essentiellement tout le répertoire de travail. Je ne sais pas si cela fonctionnera avec le--oursdrapeau, et je ne sais pas comment il gérera les conflits de fichiers supprimés ou renommés.