Pourquoi dois-je résoudre le même conflit encore et encore?

Lorsque je fais git rebase branch1 dans ma branch1-local je rencontre des conflits. Je résous le conflit, git add et ensuite git rebase --continue comme git me le demande. Après cela, un nouveau commit est appliqué. Un nouveau conflit apparaît. Mais c’est le même conflit à nouveau! le même fichier! Je le git rebase --continue , git add , la git rebase --continue , puis tout se répète jusqu’à ce que je le répète pour chaque commit sur git rebase --continue .

Pourquoi rebase me demande-t-il de refaire la même résolution de conflit encore et encore?

Ce que vous voulez, c’est git rerere qui enregistre les résolutions de conflits pour vous. La meilleure introduction à ce sujet que j’ai vue fait maintenant partie du chapitre Git Book, Tools . En pratique, lorsque vous effectuez un rebase, vous finirez par vous arrêter comme auparavant, mais vous n’avez qu’à vérifier que le conflit de fusion rest résolu, puis git add le et continuez.

Vous ne devriez pas avoir le même conflit encore et encore. Rerere ne vous aidera pas ici. Cela signifie simplement que la base de code que vous essayez de relire est si différente que chaque validation nécessite votre aide pour l’ajuster. C’est l’une des raisons de favoriser la fusion plutôt que le rebase. Rebase ne doit être utilisé que si nécessaire et ne fait pas partie de votre stream de travail habituel. Rereere aidera beaucoup plus dans un stream de travail de type fusion / réinitialisation. Voici mon stream de travail qui évite le rebasage: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

Une des façons de soulager une partie de la douleur consiste à utiliser un programme de fusion intelligent tel que Beyond Compare. Il est conscient de la syntaxe et résoudra plusieurs conflits que Git refusera (à juste titre) de faire pour vous. Plusieurs fois, ces outils, lorsqu’ils sont git mergetool même pas leur interface utilisateur, résolvent le problème et autorisent votre commande git mergetool à poursuivre le conflit suivant. N’oubliez pas de définir “trust mergetool exit code” sur true.