Comment faire pour résoudre automatiquement un Git conflit en prenant la version dans la branche?
Supposons que je reçois un conflit de fusion sur foo/bar.txt
lors de l'exécution de cette:
$ git checkout A
$ git merge B
J'aimerais résoudre automatiquement les conflits en prenant foo/bar.txt
de la direction de A. (je sais ce que je fais, et je n'ai besoin de cela. La version dans la branche B est fausse, et je ne se soucient pas de perdre les modifications dans l'arbre de travail dans ce cas.) Il semble que je peux le faire en exécutant ces commandes:
$ git reset foo/bar.txt
$ git checkout foo/bar.txt
Est-il plus simple, en une seule commande la solution?
Malheureusement, ces commandes modifient foo/bar.txt
même si il n'y a pas de conflit, et je n'en veux pas. Si il n'y a pas de conflit, je veux voulez garder foo/bar.txt
quel que soit leur état git merge B
a gauche.
J'ai donc besoin d'un shell Unix commande, ce qui permettrait de détecter si il y a un conflit dans foo/bar.txt
, et si il y est, il permettrait de résoudre le conflit en prenant la version de foo/bar.txt
de la branche courante. Il ne faisait rien d'autre, c'est à dire qu'il ne serait pas modifier d'autres fichiers, il ne serait pas valider les modifications, et il ne serait pas changer foo/bar.txt
si il n'y a pas de conflit dans ce fichier.
OriginalL'auteur pts | 2013-01-06
Vous devez vous connecter pour publier un commentaire.
Si vous voulez le faire comme un one-off, la seule ligne de commande est:
Pour configurer git de fusion et d'ignorer tous les changements en amont locale-fichier modifié:
(
true
ci-dessus est juste unixtrue
de commande, ses succès, dit-il pris la version locale de regarder à droite, dans ce cas, en ne faisant rien. Vous pouvez bien sûr obtenir plus sophistiqué avec vos commandes de fusion.)Je pense que vous ne voulez pas
merge --strategy=ours
ou--strategy-option=ours
, ceux qui s'appliquent à l'ensemble de la fusion.OriginalL'auteur jthill
Vous pouvez spécifier la fusion de la stratégie de l'option
ours
à larecursive
(par défaut) de fusion de la stratégie. Il va faire une normale de fusion, mais en cas de conflit de mecs va choisir la version de la branche courante.git merge B
de commande (et probablement beaucoup d'autres non validées modifications au système de fichiers) a déjà été exécuté.Si vous avez déjà exécuté la commande de fusion, vous devez utiliser le
reset && checkout
méthode.La remise à zéro+caisse méthode n'est pas une réponse à ma question, parce que ce n'est pas un no-op si il n'y a pas de conflit (voir la question pour plus de détails).
ouais, mais je n'ai pas dit que vous avez à faire sans aucune condition. Et ce n'est pas un no-op, car il pourrait être unconflicting changements qui sont fusionnés très bien par Git automatique de la résolution des conflits.
OriginalL'auteur knittl