In Git I can do this:
1. Start working on new feature:
$ git co -b newfeature-123 # (a local feature development branch)
do a few commits (M, N, O)
master A---B---C
newfeature-123 M---N---O
2. Pull new changes from upstream master:
$ git pull
(master updated with ff-commits)
master A---B---C---D---E---F
newfeature-123 M---N---O
3. Rebase off master so that my new feature
can be developed against the latest upstream changes:
(from newfeature-123)
$ git rebase master
master A---B---C---D---E---F
newfeature-123 M---N---O
I want to know how to do the same thing in Mercurial, and I've scoured the web for an answer, but the best I could find was: git rebase - can hg do that
That link provides 2 examples:
1. I'll admit that this: (replacing the revisions from the example with those from my own example)
hg up -C F
hg branch -f newfeature-123
hg transplant -a -b newfeature-123
is not too bad, except that it leaves behind the pre-rebase M-N-O as an unmerged head and creates 3 new commits M',N',O' that represent them branching off the updated mainline.
Basically the problem is that I end up with this:
master A---B---C---D---E---F
newfeature-123 M'---N'---O'
newfeature-123 M---N---O
this is not good because it leaves behind local, unwanted commits that should be dropped.
- The other option from the same link is
hg qimport -r M:O
hg qpop -a
hg up F
hg branch newfeature-123
hg qpush -a
hg qdel -r qbase:qtip
and this does result in the desired graph:
master A---B---C---D---E---F
newfeature-123 M---N---O
but these commands (all 6 of them!) seem so much more complicated than
$ git rebase master
I want to know if this is the only equivalent in Hg or if there is some other way available that is simple like Git.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…