Après avoir fini de travailler sur une succursale, j'ai fusionné la succursale dans le maître comme suit: Les commits marqués de '*' ont modifié le même code, de sorte que la fusion de conduite à la fusion des conflits qui ont été résolus dans la fusion commis (marquée de '+'). P> Alors que je fus en fusionné et résolu les conflits, mon collègue a poussé de nouveaux engagements à maîtriser (marqué comme «N»), ce qui a permis de suivre l'histoire suivante: P> o---*---o---o-------- topic
/ \
o---o---o---*---o---o---n---n---+ master & origin/master
4 Réponses :
Et si vous rebasez le sujet sur le dessus du maître, puis réinitialisez le maître à la commission précédente et tirez de la télécommande, de sorte que vous auriez ceci: et ensuite vous fusionnez la rubrique Dans Master, ce qui a entraîné cette (nouvelle fusion commettage marquée de «#»): P> o---*---o----o
/ \
o---o---o---*---o---o----+ topic
\ \
n--n--# master
J'aimerais empêcher cette histoire «laid» et avoir une fusion que
Le premier moyen serait le meilleur. Annuler votre fusion et le refaire pour obtenir les changements de votre collègue dans la fusion commis. Mais vous n'avez pas besoin de jeter les changements.
Puisque vous savez que les modifications de votre collègue n'affectent pas les fichiers que vous avez résolus les conflits. Vous pouvez créer une nouvelle succursale (nous l'appellerons plutôt que d'utiliser Ceci est assez facile à faire et entraînera la commission de fusion unique que vous recherchez plus vous permettant de pousser vos changements . Si les nouveaux commits ont affecté les fichiers que vous avez résolu les conflits que vous auriez à les refaire de toute façon. P> EDIT em> strong> p> Je ne suis pas complètement familier avec Vous effectuez les suivantes: p> et vous devriez vous retrouver avec: p> Il ne devrait pas y avoir besoin de rebaisser quoi que ce soit. p> Conflit-correction code>) de votre état actuel de maître. Réinitialisez votre branche et refaire la fusion. P>
git mergetool code> ou quel que soit l'éditeur que vous utilisez. Vous pouvez apporter le fichier en Master à partir de votre autre succursale à l'aide de
Git Checkout Conflict-Fix -
git Ajouter code> Les fichiers et s'engagent à compléter la fusion. Ensuite, vous pouvez supprimer la branche
Conflict-Fix Code>. P>
git rere code> mais cela aurait dû travailler. Cependant, basé sur votre commentaire, vous n'avez pas besoin de rebaser. Vous auriez toujours annulé la fusion commit,
git fetch code> les mises à jour et réadaptée à la fusion. Vous devriez simplement appeler la commande
git rere code> et il aurait résolu les conflits dans les fichiers pour vous. Avec votre arbre en ressemblant à ceci: p>
Je viens de l'essayer, ça marche bien. Mais: Si Origin / Master a des changements dans le même dossier qui conduisent à des conflits (modifiés dans «*») mais sur d'autres lignes (ne conduisant pas à des conflits de fusion supplémentaires), ces changements seraient retournés si je viens de vérifier le conflit -fix code> -Versions des fichiers contradictoires. Par conséquent, je cherche toujours une solution avec GIT réappliquant automatiquement la solution de conflit que j'ai faite dans la première fusion (et je pensais
rere code> ferait cela)
Malheureusement, rere code> ne fonctionne pas dans ce cas, il suffit de l'essayer à nouveau d'être sûr. Il dit même «résolution enregistrée pour ...» lors de la fusion pour la première fois mais ne fait rien du tout lors de la fusion comme proposée.
Rere est le moyen d'éviter que cela soit un tel problème, mais si vous ne l'avez pas été activé avant de faire la première fusion que cela ne vous aide pas. Vous pouvez savoir s'il est activé car il donnera des messages sur «enregistrement prétimage» p>
Je l'ai rencontré récemment parce que j'avais une nouvelle machine de développement et j'ai oublié de activer Rere avant une fusion laidée. Il n'y a pas une grande solution git uniquement à ce scénario, mais ce qui suit est la récupération la plus facile de cette situation que je pourrais proposer. P>
Étant donné que nous travaillions avec Gerrit, je m'assurais également que le changement-ID était la même chose que mon précédent fusion commettre afin que je puisse vérifier que rien n'avait mal tourné. P>
Rerere aide mais malheureusement ne résout pas complètement le problème, car il ne fait que enregistrer des résolutions pour les conflits, mais il se peut que des modifications supplémentaires soient nécessaires pour obtenir une construction réussie qui n'étaient pas à l'origine des conflits (par exemple, un code purement ajouté pourrait passer le problème paramètres à une méthode qui a été modifiée "à l'extérieur").
Aussi loin que j'ai lu / compris sur Vous devez donc faire le truc: p>
Si vous ne voulez pas utiliser le script, vous pouvez également faire la formation manuellement, voir https://stackoverflow.com / A / 4155237/6309 P>
Gardez à l'esprit, que Vous avez J'ai choisi cette option plusieurs fois dans le passé, ne provenant pas nécessairement de la même situation, mais avec d'autres cas où l'historique réécrit de rere code> il devrait être capable d'aider à cette situation exacte si vous utilisez le
RERERE-TRAIN.SH CODE>
Script Pour enregistrer vos résolutions déjà engagées. P>
rere code> connaît vos résolutions de conflit de cette fusion li>
rere.enabled = true code> dans votre config li>
Rere code> devrait pouvoir réutiliser les résolutions précédemment enregistrées LI>
rere.enabled code> à nouveau (il pourrait y avoir des raisons de ne pas le laisser activé, voir y a-t-il Dowsidsed pour permettre à Git Rere? ) LI>
ol>
RERERE code> enregistre uniquement des conflits / résolution pour les mecs de conflit (avec le
<<<<< / code> et
>>>> Code> en elle). Il n'enregistrera pas les résolutions des conflits qui se produisent en raison de la suppression d'une branche et de modification de l'autre branche pour le même dossier. En outre, cela n'enregistre aucun changement supplémentaire que vous avez effectué en dehors des mecs de conflit. P>
Origine / Master Code> a été publié sur un ensemble inconnu de personnes: Rebase
Origine / maître code> sur votre
maître local code> et faire une force de force. p>
origine / maître code> était souhaitable. Si vous avez une petite équipe, cela sera simplement une question de communication / de coordination. P>
Vous pouvez également simplement backmer Origin / Master avant de vous faire part de votre nouveau maître.
@Scaytrase qui serait possible, mais conduirait à une sorte d'histoire laide; Je préférerais la solution propre avec une fusion que
Malheureusement, il n'y a pas de sens réel sur ceci: quelle que soit la question de vos deux options que vous avez fini par choisir, vous devrez probablement résoudre les conflits de nouveau. Si vous prévoyez que vous vous retrouverez dans la même situation à l'avenir, vous devriez peut-être envisager d'activer
rere code>
.@Jubobs a oublié de mentionner que config.rere est activé, n'a pas aidé non plus. Ajoutera ceci à la question.
@Rhabarbrabersaft pouvez-vous spécifier pourquoi
rere code> n'a pas fonctionné? Avez-vous essayé de rebaser (option 2) et de toucher les mêmes conflits de fusion, malgré
Rere code> étant activé?
@Jubobs lors de la fusion (et de la résolution des conflits), je vois la «résolution enregistrée pour ...» Message de
Rere code>, de sorte que cela semble fonctionner. Mais lors de la refaissement, les mêmes conflits apparaissent et
rere code> ne font rien (affichant tous les fichiers conflictuels lors de l'appelant
git rere restant code>)