Hg: Comment faire un rebase comme git du rebase

Dans Git, je peux le faire:

1. Commencer à travailler sur une nouvelle fonctionnalité: 
$ git co -b newfeature-123 # (un local de développement de la branche) 
faire quelques commits (M, N, O) 

maître A---B---C 
\ 
newfeature-123 M---N---O 

2. Tirez sur les nouveaux changements de l'amont maître: 
$ git pull 
(master mis à jour avec ff-commits) 

maître A---B---C---D---E---F 
\ 
newfeature-123 M---N---O 

3. Rebase de master ainsi que ma nouvelle fonctionnalité 
peut être mis au point contre les derniers changements en amont: 
(à partir de newfeature-123) 
$ git rebase maître 

maître A---B---C---D---E---F 
\ 
newfeature-123 M---N---O 

Je veux savoir comment faire la même chose dans Mercurial, et j'ai écumé le web pour une réponse, mais le meilleur que j'ai pu trouver était: git rebase - peut hg faire

Ce lien donne 2 exemples:

1. Je vais vous avouer que cela: (en remplacement de la révision à partir de l'exemple avec ceux de mon propre exemple)

hg jusqu'-C F 
hg branche -f newfeature-123 
hg greffe -a-b newfeature-123 

est pas trop mal, sauf qu'il laisse derrière lui le pré-rebase M-Pas comme un dissociées de la tête et crée 3 nouveaux commits M',N',O' qui les représentent embranchement à partir de la mise à jour de la ligne principale.

Fondamentalement, le problème est que je me retrouve avec ceci:

maître A---B---C---D---E---F 
\ \ 
newfeature-123 \ M'---N---O' 
\ 
newfeature-123 M---N---O 

ce n'est pas bon parce qu'il laisse derrière local, indésirables s'engage à ce que devrait être abandonnée.

  1. L'autre option à partir du même lien est
hg qimport -r M:O 
hg qpop -un 
hg jusqu'F 
hg branche newfeature-123 
hg qpush -un 
hg qdel -r qbase:qtip 

et cela a pour conséquence le graphique souhaité:

maître A---B---C---D---E---F 
\ 
newfeature-123 M---N---O 

mais ces commandes (tous les 6 d'entre eux!) l'air beaucoup plus compliqué que

$ git rebase maître 

Je veux savoir si c'est le seul équivalent en Hg ou si il y a une autre manière qui est simple comme Git.

  • "ce n'est pas bon parce qu'il laisse derrière local, indésirables s'engage à ce que devrait être abandonnée." - en fait, git fait la même chose. Il ne permet pas de modifier ou de supprimer les commits dans l'origine de la branche, il est tout à fait nouvelles qui s'appliquent de la même série de changements sur le dessus de maître. Vous pouvez toujours accéder à l'ancienne à l'aide de git reflog et ils ne sont pas totalement disparu jusqu'à ce qu'ils obtiennent des ordures collectées. Si vous souhaitez les conserver dans une branche nommée, de sorte que vous n'avez pas à utiliser le reflog, il suffit de faire git branch feature-123_original avant le changement d'année de base.
  • Question au hasard: avez-vous ascii-dessiner les ensembles de modifications/branches vous-même ou est-il un outil qui le fait?
  • Juste fait moi-même avec TextWrangler mis à "écraser."
InformationsquelleAutor jpswain | 2010-04-20