2010-06-01 4 views
3

Ceci est essentiellement le résultat d'une classe C massive sur le maître ayant été refactorisée en deux classes plus petites, C1 et C2. C a ensuite été transformé en une sous-classe de C2 et réduit à une version squelettique pour la compatibilité descendante. Donc, à partir de ce moment, le maître contenait C, C1 et C2. Sur ce maître, commit git dit que C a été renommé en C1. La branche a été mise à jour pour la dernière fois avant que cela n'arrive. (Tout le code C++, s'il aide à visualiser les fichiers impliqués)Fusionner les modifications lorsqu'un fichier sur une branche est divisé en deux fichiers sur le master

Évidemment, quand j'ai essayé une rebase de la branche sur master, il y avait des conflits qui devaient être résolus.

Comme d'habitude, j'ai utilisé mergetool.

Alors maintenant, le mergetool vient avec ce qui suit: au niveau local, je la version du squelette de C. de base et ont à distance un tas de changements à C.

Parce que la version du squelette de C existe sur Local, je conclus que les changements de base et à distance devraient effectivement aller dans C1, laissant C seul.

Ma question est, comment puis-je faire?

Répondre

4

Peut-être sur cette instance rebasage, une résolution plus directe du conflit de fusion est dans l'ordre:

 
    git checkout --ours C 
    git show :1:/path/to/C# check what need to be copied to C1 from Base 
    git show :3:/path/to/C# check what need to be copied to C1 from remote 
    git add /path/to/C 
    git add /path/to/C1 
  • git commit
+0

Cela peut aussi être une option pour utiliser le '--confli ct = diff3' option pour obtenir tous les mecs dans les fichiers réels, je pense. (+1) – Cascabel

+0

Merci! C'est exactement ce que je recherchais. – Carl

Questions connexes