2015-07-13 2 views
2

J'ai l'histoire suivante:Dans Mercurial, comment modifier un ancien ensemble de modifications lorsque l'historique contient des fusions?

@ 4 changesABC tip 
|\ 
| o 3 changesAB 
| | 
o | 2 changesAC 
|/ 
o 1 changeA 
| 
o 0 initial. 

Maintenant, je veux faire un changement à changeSet 1, de sorte que le changement se reflète dans ses descendants. Si je tente:

hg histedit 1 

Je reçois:

abort: cannot edit history that contains merges 

Tout moyen de contourner cela? Je trouve ce scénario très commun; ce serait vraiment utile si je pouvais le faire.

Répondre

2

Il n'y a pas de moyen facile de le faire, et cela vaut aussi (encore) pour l'extension evolve (esprit, c'est toujours indiqué comme expérimental). Cependant lorsque vous essayez la même chose que vous avec évoluez actif, il suggère:

Abbort: no support for evolving merge changesets yet (Redo the merge and use 'hg prune <old> --succ <new>' to obsolete the old one)

Le flux de travail avec l'extension Evolve activé doit ressembler à: hg up 1 (make changes) hg evolve -a Vous devez ensuite refaire la fusion comme l'a suggéré et alors vous devriez avoir terminé (veuillez utiliser les révisions appropriées, en tapant simplement par cœur): hg merge -r6 hg prune 4 --succ NEW_MERGE_CHANGESET Attention, cela ne fonctionne que sur les changesets non publics, vous devrez donc forcer un changement de phase avant ces opérations.

+0

Thanx. C'est vraiment dommage que Mercurial/Evolve ne supporte pas ce qui me semble être une fonctionnalité si importante. –