Git résoudre les conflits à l'aide de --la nôtre/--la leur pour tous les fichiers
Est-il un moyen de résoudre les conflits pour tous les fichiers à l'aide de la caisse --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.
- Ne
git checkout --ours -- .
travail? Le.
désigne le répertoire courant, lorsqu'il est appliqué à partir du répertoire de travail de la racine, de sorte qu'il est fondamentalement signifie que la totalité du répertoire de travail. Pas sûr si cela va fonctionner avec la--ours
drapeau cependant, et je ne suis pas sûr de savoir comment il va gérer supprimé ou renommé conflits de fichiers. - Je l'ai utilisé avec succès. Peut-être cela devrait être une réponse?
Vous devez vous connecter pour publier un commentaire.
Juste grep à travers le répertoire de travail et envoyer la sortie à travers la commande xargs:
ou
Comment cela fonctionne:
grep
recherche dans tous les fichiers dans le répertoire courant (.
) et les sous-répertoires de manière récursive (le-r
drapeau) à la recherche de marqueurs de conflit (la chaîne de caractères " <<<<<<<")la
-l
ou--files-with-matches
drapeau causes grep de sortie uniquement le nom de fichier où la chaîne a été trouvée. La numérisation s'arrête après le premier match, de sorte que chaque fichier correspondant n'est sortie qu'une fois.De la correspondance des noms de fichier sont alors les canalisations à xargs, un utilitaire qui brise les canalisations du flux d'entrée dans des arguments pour
git checkout --ours
ou--theirs
Plus sur ce lien.
Car il serait très gênant 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 devrait fonctionner au moins au travers de versions Git 2.4.x
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 grand 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]
.file\ name\ with\ spaces.txt
Ou, joignez-y tous les chemins d'accès dans les guillemets: unix.stackexchange.com/questions/131766/...Vous pouvez
-Xours
ou-Xtheirs
avecgit merge
ainsi. Donc:git reset --hard HEAD
)git merge -Xours
ougit merge -Xtheirs
)AVERTISSEMENT: vous pouvez bien sûr choisir une seule option, soit
-Xours
ou-Xtheirs
, utilisez différentes stratégie vous devriez sans doute aller de fichier par fichier.Je ne sais pas si il existe un moyen pour
checkout
, mais je ne pense honnêtement que c'est très utile: la sélection de la stratégie de la caisse de commande est utile si vous souhaitez des solutions différentes pour les différents fichiers, sinon il suffit d'aller pour la fusion approche de la stratégie.--theirs
ou--ours
-Option pour git v1.9.4. Une approche seraitgit merge -s recursive -Xtheirs BRANCH
.--theirs
et--ours
ne sont pas disponibles ni avec git2.2.0
. Soit ma réponse n'est pas précise ou qu'ils étaient disponibles dans les anciennes version git (cette réponse est assez vieux en ELLE de l'époque). La bonne approche est avec-X
. - Je mettre à jour en conséquencerebase
ing, bien que l'identité deours
ettheirs
est sous tension (Xours
les moyens de maintenir les changements de la branche être relocalisée sur).git checkout --[ours/theirs] .
à faire ce que vous voulez, tant que vous êtes à l'origine de tous les conflits. le nôtre/la leur n'affecte non fusionné les fichiers de sorte que vous ne devriez pas avoir à grep/find/etc conflits en particulier.error: path 'foo/bar/blah' does not have our version
.Semble faire le travail. Notez que vous devez être de cd ed pour le répertoire racine du repo git pour atteindre cet objectif.
Au cas où quelqu'un d'autre est à la recherche de tout simplement de remplacer tout de branche en branche (par exemple master) avec le contenu d'un autre, il y a un moyen plus simple:
Grâce à https://stackoverflow.com/a/1295232/560114
Ou pour les autres sens, voir Est-il "leur" version de "git merge -s nôtre"?
J'ai ajouté cette fonction dans .zshrc fichier.
Les utiliser de cette façon:
gitcheckoutall theirs
ougitcheckoutall ours