Existe-t-il un moyen de résoudre les conflits pour tous les fichiers en utilisant l'extraction --ours
et --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 --ours
et --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: grep
recherchera 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 -l
ou --files-with-matches
oblige 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 --ours
ou--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 -Xours
ou -Xtheirs
avec git merge
aussi. Alors:
git reset --hard HEAD
)git merge -Xours
ou git merge -Xtheirs
)AVERTISSEMENT: Bien sûr , vous pouvez choisir qu'une seule option, que ce soit -Xours
ou -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.
--theirs
ou --ours
-Option pour git v1.9.4. Une approche serait git merge -s recursive -Xtheirs BRANCH
.
--theirs
et --ours
ne 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--ours
drapeau, et je ne sais pas comment il gérera les conflits de fichiers supprimés ou renommés.