Il existe de nombreux scénarios où vous pourriez vouloir faire cela, je vais faire de chaque scénario d'un titre, de sorte que vous pouvez trouver le scénario qui correspond à votre cas. Remarque que je suis encore à apprendre Mercurial, et j'aimerais pointeurs si quelque chose que je dis est faux, l'utilisation de la mauvaise terminologie, pourrait faire mieux, etc.
Aucune autre modification, de fusion, non partagée (pas de pousse/tire)
Le programmeur a fusionné, mais ne fait pas autre chose, ni a (s)il a partagé les changements avec quelqu'un, en quelque sorte
Dans ce cas, il suffit de jeter le clone local, et obtenir une nouvelle clone à partir d'un coffre de dépôt.
Les modifications locales sur le dessus de la fusion, ne partage pas
Le programmeur a fusionné, et a continué à travailler basé sur cette fusion. Les révisions qui ont suivi la fusion doit être maintenue, mais la fusion elle-même doit être supprimé. Les changements (fusion + suite à des révisions) n'ont pas été partagés avec n'importe qui
Dans ce cas, je voudrais faire l'un des quatre:
- Essayez d'utiliser le REBASE extension, cela vous permettra de déplacer les révisions d'un endroit à un autre. Si les révisions sont fondées sur le code des changements qui ont été introduites avec la fusion, à quelque travail manuel doit être fait pour concilier les différences.
- Essayez d'utiliser la MQ extension de tirer les révisions qui seront conservés dans un patch de la file d'attente, puis le pousser en arrière dans un emplacement différent. Ce sera, cependant, ont le même problème que le REBASE extension en termes de changements basée sur la fusion
- Essayez d'utiliser la GREFFE de extension à "copier" les modifications à partir d'un emplacement à un autre. Encore, le même problème existe avec les deux premiers.
- Faire le travail à nouveau, probablement avec l'aide d'un outil de comparaison pour prendre les modifications effectuées dans les révisions, je veux jeter, et re-faire dans l'emplacement correct.
Pour se débarrasser de la révision de la fusion + toutes les révisions, il y a deux options:
-
L'utilisation de la bande de commande dans la MQ extension
hg strip <hash of merge changeset>
-
Clone et le pull, et spécifier la valeur de hachage de la révision avant, mais ne comprenant pas la fusion. En essence, créer un nouveau clone en tirant à partir de la partie endommagée du clone dans un nouveau, et éviter de tirer dans la fusion vous ne voulez pas.
hg clone damaged -r <hash of first parent> .
hg pull damaged -r <hash of second parent>
Fusion poussé pour d'autres, le contrôle des clones
Le programmeur a poussé à référentiel maître, ou à quelqu'un d'autre, ou quelqu'un a de la part des programmeurs référentiel. Cependant, vous (comme dans le groupe de développeurs) ont le contrôle sur tous les dépôts, comme dans, vous pouvez contacter et parler à tout le monde avant de plus le travail est effectué
Dans ce cas, je voudrais voir si l'étape 1 ou 2 pourrait être fait, mais il peut être fait dans beaucoup d'endroits, de sorte que cela peut impliquer beaucoup de travail.
Si personne n'a fait un travail basé sur la révision de la fusion, je voudrais utiliser l'étape 1 ou 2 pour nettoyer, puis poussez le référentiel maître, et demandez à chacun de se faire une douce clone du dépôt principal.
Fusion poussé, vous n'avez pas de contrôle sur les clones
Le programmeur a poussé le mergeset, et vous ne savez pas qui aura la révision de la fusion. En d'autres termes, si vous avez réussi à l'éradiquer de vos dépôts, un chien errant coup de pouce de quelqu'un qui a toujours il va le ramener.
Ignorer la révision de la fusion et de travailler dans les deux branches, comme si ça n'était jamais arrivé. Cela laissera une balançant la tête. Vous pouvez ensuite plus tard, quand vous avez fusionné les deux branches, faire un null-fusion pour cette tête de se débarrasser de lui.
M <-- this is the one you want to disregard
/ \
* *
| |
* *
| |
Simplement continuer à travailler dans les deux branches:
| |
* *
| M | <-- this is the one you want to disregard
|/ \|
* *
| |
* *
| |
Puis, plus tard, la fusion des deux, le réel de fusion que vous voulez:
m
/ \
* *
| |
* *
| M | <-- this is the one you want to disregard
|/ \|
* *
| |
* *
| |
Vous pouvez ensuite faire un null-fusionner pour se débarrasser de la balançant la tête. Malheureusement, je ne sais pas comment le faire que par TortoiseHg. Il a une case où je peux annuler toutes les modifications à partir de l'une des branches.
Avec TortoiseHg, je voudrais le mettre à jour pour la fusion je veux garder (le premier, m minuscule), sélectionnez puis cliquez-droit sur le balançant de fusion de la tête ci-dessous, puis cochez la case "ignorer toutes les modifications de la fusion de la cible (autres) révision":