2017-10-08 9 views
0

J'ai une branche principale dans laquelle se trouve un fichier Demo.txt. Il a les 2 lignes suivantes:

AAAAAA
BBBBBB

Une nouvelle branche Dev est dérivée du maître à ce point. La branche Dev contient maintenant demo.txt avec les mêmes 2 lignes à savoir

AAAAAA
BBBBBB
Rétablissement d'une fusion git ayant des conflits de fusion qui ont été résolus pendant la fusion et qui a été poussée vers la télécommande

Lets Supposons que je checkout maître et ajouter une nouvelle ligne à demo.txt afin que le fichier devient:

AAAAAA
BBBBBB
XXXXX

De même, je puis Dev et extrais par checkout ajouter une nouvelle ligne à demo.txt afin que le fichier devient:

AAAAAA
BBBBBB
YYYYYY

Maintenant, je checkout maître et fusionner Dev en elle. Il y a un conflit de fusion sur le fichier Demo.txt dans la 3ème ligne. Supposons que le conflit soit résolu en conservant les entrées de la branche principale et de la branche Dev. Laisse supposer le nouveau fichier fusionné ressemble à:

AAAAAA
BBBBBB
XXXXX
YYYYYY

Maintenant, je commettras la fusion et le pousser vers le dépôt distant. Supposons que l'identifiant commit de la fusion soit quelque chose comme abcdef056fg (seulement un exemple). Après avoir poussé la fusion, je découvre qu'il y a eu une erreur dans la résolution du conflit de fusion et je veux annuler la fusion. De plus, je veux ajouter un autre changement à Dev dans le correctif d'erreur avant de le fusionner à nouveau. Selon les directives données dans ce lien par Linus Torvalds - "https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt", je reviens sur le retour de la fusion abcdef056fg. Par exemple, je checkout maître, faire "revert -m 1 abcdef056fg" qui me donne un nouveau commit.I revenir sur le commit pour obtenir le retour du retour. Le revert de fusion revert me donne la demo.txt suivante:

AAAAAA
BBBBBB
XXXXX
YYYYYY

Je puis Dev et extrais par checkout ajouter un nouveau fichier à Demo2.txt avec les lignes suivantes ;

PPPPPP

I maintenant maître caisse et fusionner Dev nouveau. Le nouveau fichier Demo2.txt est fusionné correctement en master. Mais je n'ai pas la possibilité de résoudre à nouveau le conflit de fusion de Demo.txt. Supposons que je voulais que le conflit de fusion apparaisse à nouveau dans Demo.txt pour que je puisse changer à ce qui suit:

AAAAAA
BBBBBB
YYYYYY
XXXXX

au lieu de

AAAAAA
BBBBBB
XXXXX
YYYYYY

Comment puis-je le faire. Je ne veux pas faire de changements directement sur mon master car je garde ma branche master propre et je ne fais aucun développement dessus. Tout le développement est fait dans la branche Dev et il est finalement testé et fusionné dans le master. Aussi c'est un exemple artificiel avec un conflit unique. Une telle fusion pourrait avoir plusieurs conflits qui ont été résolus et commis et je ne voudrais pas réparer tous ceux dans le maître. Alors, comment je fais?

+1

Copie possible de [Comment résoudre les conflits de fusion dans Git?] (https://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) – kRiZ

Répondre

0

J'ai trouvé la réponse à cette question.La réponse réside dans le fait qu'il y a une erreur évidente dans laquelle la fusion ci-dessus a été effectuée.J'ai mentionné que mon intention était de garder la branche maîtresse toujours propre, sans développement J'ai ajouté la 3ème ligne XXXXXX à Demo.txt en master avant la première fusion. C'est une contradiction. Maintenant, après avoir ajouté XXXXX, j'aurais d'abord fusionné maître dans Dev avant de fusionner Dev nouveau dans master.Doing le prieur aurait donné les conflits de fusion dans demo.txt qui aurait été résolu selon l'exigence de la manière suivante:

AAAAAA
BBBBBB
XXXXX
YYYYYY

Si je puis en retour fusionné maître, il aurait été une fusion tout droit avec demo.txt en maître comme restant:

AAAAAA
BBBBBB
XXXXX
YYYYYY

maintenant revenir le revert en maître aurait gardé demo.txt comme ci-dessus. Maintenant, si j'ai vérifié Dev pour le correctif de bug (à l'exception de l'ajout Demo2.txt) et fixé demo.txt comme suit:

AAAAAA
BBBBBB
YYYYYY
XXXXX

et vérifié maître à nouveau et a fusionné Dev en maître, git fixerait demo.txt en maître avec les quatre lignes sans donner conflits de fusion suivants:

AAAAAA
BBBBBB
YYYYYY
XXXXX

Cela résout notre but.

Ne pas supprimer la question car cela pourrait être une analyse utile.