2010-07-12 8 views
2

Je souhaite annuler une fusion car au lieu d'utiliser git merge -s recursive -X ours, j'ai utilisé git merge -s ours.Rétablissement d'une fusion git - nôtre

J'ai lu this blog post sur la fusion des fusions, mais cela ne semble pas fonctionner dans mon cas. J'ai donc la branche master, puis la branche topic. À un moment donné, j'ai fusionné master en topic, puis fusionné topic en master. Quand j'ai fusionné master en branch, j'ai eu un conflit sur un fichier, mais je me suis dit que ça n'avait rien d'important alors j'ai pensé que je disais git de l'ignorer, et d'utiliser ma version. C'est à ce moment-là que j'ai utilisé git merge -s ours, au lieu de git merge -s recursive -X ours, et j'ai découvert aujourd'hui qu'elle ignorait tout ce qu'un de mes coéquipiers a fait.

Maintenant, je suis en train de revenir cette fusion:

git checkout master 
git revert -m 2 c475f0ac 

Cela apporte en effet dans l'arbre les changements sont ignorés dans ma fusion (mon coéquipier changements). Le problème est que maintenant, mes changements ne sont plus dans l'arbre. J'ai essayé d'inverser le retour, mais pas de succès.

Une suggestion sur la façon de rétablir une telle fusion?

+0

Existe-t-il une possibilité de réinitialiser --hard' tant le maître que le sujet dans leur état avant la fusion? – VonC

+0

Pas tout à fait. La fusion a été poussée. Je suppose que ce que je peux faire est de rétablir la fusion avec '--no-commit' afin que je puisse corriger les changements et ensuite valider le retour. –

+0

Mise à jour. C'est exactement ce que j'ai fait. Rétabli avec --no-commit, a corrigé les changements et ensuite commit. Cela a bien fonctionné à ce moment-là. –

Répondre

1

Le sous-commande revert fait un commit pour annuler la spécifiée commettre, cela est généralement compliqué pour la fusion revert engage

Vous pouvez définir l'arbre à l'état d'un commit spécifique, rechercher la fusion commit (est c475f0ac?) puis définissez l'arbre au parent de l'état de cette commit (notez le point à la fin de la commande, il est important):

git checkout c475f0ac^ . 

Si vous souhaitez définir l'état à différents parent du commit, vous devrait utiliser

git checkout c475f0ac^2 . 

Et ainsi de suite. Vous trouverez utile la commande gitk pour analyser les commits procéder avant (choisir le commit que vous voulez):

gitk c475f0ac 

Après avoir défini l'état à la validation précédente, vous pouvez commettre

git commit --message 'restored tree to state previous to merge commit c475f0ac' 

Et puis appuyez sur

git push 
Questions connexes